JavaScript中的对象包括静态对象和实例对象,其中静态对象是通过构造函数定义的属性和方法的集合,可以通过构造函数名直接访问,而实例对象则是由构造函数实例化出来的。在 JavaScript 中,对象可以拥有公共方法和私有方法,公共方法可由对象直接访问,私有方法只能在构造函数内部使用。
静态对象使用
在 JavaScript 中,我们可以使用构造函数来定义静态对象。静态对象可以存储在构造函数本身的静态属性中,也可以在prototype原型链中定义静态方法,因为prototype是所有实例化对象所共享的。
// 构造函数定义静态对象属性
function Dog(name, breed) {
Dog.count++;
this.name = name;
this.breed = breed;
}
Dog.count = 0;
// 原型链定义静态方法
Dog.prototype.bark = function() {
console.log("Woof!");
}
当需要创建多个相同类型的实例对象时,可以通过构造函数实例化多个对象,并将它们的属性和方法存储在各自的实例对象中:
var myDog1 = new Dog("Buddy", "Golden Retriever");
var myDog2 = new Dog("Sadie", "Border Collie");
console.log(myDog1.name); // Buddy
console.log(myDog2.breed); // Border Collie
myDog1.bark(); // Woof!
myDog2.bark(); // Woof!
构造函数的公私问题
构造函数中定义的方法和属性有公共和私有之分。公共方法可以在外部访问,而私有方法只能在构造函数内部访问。
公共方法
公共方法可以通过原型链挂载到构造函数上,不同的实例对象都可以共享这些方法。例如,下面的例子中,公共方法bark
可以在所有实例对象上调用:
function Dog(name, breed) {
this.name = name;
this.breed = breed;
}
Dog.prototype.bark = function() {
console.log("Woof!");
}
var myDog = new Dog("Buddy", "Golden Retriever");
myDog.bark(); // 输出 Woof!
私有方法
私有方法只能在构造函数内部访问,不能被外部访问。例如,下面的例子中,私有方法woofer
只能在Dog
构造函数内部调用:
function Dog(name, breed) {
this.name = name;
this.breed = breed;
// 私有方法
function woofer() {
console.log("Woofer!");
}
}
var myDog = new Dog("Buddy", "Golden Retriever");
myDog.woofer(); // TypeError: myDog.woofer is not a function
示例说明
示例1
我们可以创建一个静态对象MathUtils
,来存储一些与数学相关的公共方法和属性。这样只需在定义好的MathUtils
对象上调用方法即可,无需每次要使用这些公共方法和属性时都要定义新的对象。
// 静态对象使用示例
var MathUtils = {};
MathUtils.factorial = function(n) {
if (n === 0) {
return 1;
}
else {
return n * MathUtils.factorial(n-1);
}
}
console.log(MathUtils.factorial(5)); // 120
示例2
在构造函数内部,可以在闭包中定义私有方法。这些方法只能在构造函数内部访问。
// 构造函数公私问题示例
function Person(name) {
this.name = name;
// 私有方法
var greet = function() {
console.log("Hello, my name is " + name);
}
// 公共方法
this.sayHello = function() {
greet();
}
}
var peter = new Person("Peter");
peter.sayHello(); // Hello, my name is Peter
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript 静态对象和构造函数的使用和公私问题 - Python技术站