- function Person(){
}
Person.prototype.name='Malin';
Person.prototype.sayname=function(){
alert(this.name);
};
var person1 = new Person ();
person1 . sayname(); // 'Malin'
- Person.prototype.constructor = Person // Person 是一个构造函数 Person.prototype是一个原型对象,他的constructor属性指向了Person构造函数
- person1实质上是与 Person.prototype有直接关系,与Person构造函数无关
Person.prototype 有很多属性 name , sayname()...
person1继承了原型对象的属性和方法
person1._proto_ == Person.prototype // true
- 如果原型中有的属性,和实例对象的属性有重名,则不会去找原型里面的同名属性,因为顺序是,先从这个实例对象的属性找,找到了就不会去原型找了
- deleta person1.name //删除实例自己创建的name属性,那么就会去原型中找name属性
- 更好的写法
Person.prototype = {
constructor : Person, // 用这种写法会导致 constructor指向Object 所以要重写 constructor指向Person
name : 'Malin',
sayname : function(){
alert( this.name );
}
}; - 最好的创建实例的方法,构造函数和原型模式混合使用
function Person(){ //所有的属性,都封装在 构造函数中
name = 'Malin';
friends = { 'lihua' , 'xiaoming'};
}
Person.prototype = { //所有的方法, 都封装在原型中
constructor = Person,
sayname = function(){
alert( this.name );
}
};
var person1 = new Person();
var person2 = new Person(); - 无对象属性的时候创建选择动态原型模式