- 之前我们已经学过了原型如何使用,那么现在我们介绍一种简单原型的使用方式:即直接通过对象字面量来重写整个原型对象(这种方法会改变原型对象的构造器)
- ECMA5中的Object.defineProperty()方法可以为原型对象重新加入构造器。
- 原型的动态性(注意原型和创建实例的前后顺序)
//简单原型
function Person(){
}
Person.prototype = {
//constructor : Person,
name : 'z3',
age : 20,
job : '前端开发',
sayName : function(){
console.log('我是一名' + this.job);
}
}
//ECMA5 给原型对象从新设置构造器方法 Object.defineProperty()
//接受3个参数,1:重设构造器的对象,2:设置什么属性,3:options配置项
Object.defineProperty(Person.prototype,'constructor',{
enumerable : false,
value : Person
});
var p1 = new Person();
console.log(p1.age);
p1.sayName();
console.log(p1.constructor); //function Person(){}
console.log(Person.prototype.constructor); //function Person(){}
for(arrt in p1){
console.log(arrt);
}
//原型的动态性
function Person(){
}
var p1 = new Person();
Person.prototype = {
constructor : Person, //必须表示原型的构造器
name : 'z4',
age : 50,
height : 170,
sayName : function(){
console.log('我身高为:'+this.height);
}
}
console.log(p1.name); //undefined 原型对象里没有任何属性和方法
//注意简单原型使用的顺序(实例对象必须在原型对象后创建)
var p2 = new Person();
console.log(p2.sayName());