组合使用构造函数模式和原型模式的代码实例:
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Toby", "Tina"];
}
Person.prototype = {
sayName: function() {
console.log(this.name);
}
}
// 以下代码,确保通过 constructor 属性还能像之前的语法那样能够访问到适当的值
Object.defineProperty(Person.prototype, "constructor", {
enumerable: false,
value: Person
});
var person1 = new Person("Neo", 29, "Software Engineer");
var person2 = new Person("Tim", 30, "Teacher");
person2.friends.push("Jack");
console.log(person1.friends);
console.log(person2.friends);
console.log(person1.friends === person2.friends);
console.log(person1.sayName === person2.sayName);
输出结果:
输出结果这种构造函数与原型模式混成的模式,是目前在 ECMAScript 中使用最广泛、认同度最高的一种创建自定义类型的方法。可以说,这是用来定义引用类型的一种默认模式。
网友评论