字面量创建对象
var obj = {
name: '小王',
age: '26',
gender: 'male'
}
工厂方法
function createPerson (name, age, gender) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function () {
console.log(name);
}
return obj;
}
var person1 = createPerson('小王', 29, '男');
var person2 = createPerson('小沈', 24, '男');
构造函数
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gendr = gender;
this.sayName = function () {
console.log(this.name);
}
}
var person1 = new Person('小王', 29, '男');
var person2 = new Person('小沈', 24, '男');
使用构造函数的缺点: 每次创建示例方法都需要重新创建一遍。这时候,改造下构造函数:
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gendr = gender;
this.sayName = sayName();
}
function sayName() {
console.log(this.name);
}
现在我们共享了一个全局函数,避免了重复创建同一个函数,但是当构造函数需要很多函数,我们就需要创建很多全局函数,这样就毫无封装性可言。所以我们引入原型模式。
原型模式
function Person(name, age, gender) {
this.name = name;
this.age = age;
this.gendr = gender;
}
Person.prototype.sayName = function () {
console.log(this.name);
}
扩展
判断是否是原型属性
function hasPrototypeProperty(obj, pro) {
return !obj.hasOwnProperty(pro) && (pro in obj);
}
网友评论