4.原型的动态性



function Person(){

}
var firend=new Person();
Person.prototype.sayHi=function(){
alert("hi");
}
firend.sayHi(); // hi
// 没有重写原型!!!!
//虽然sayHi()方法是在firend实例化之后定义的,但是firend仍然可以访问sayHi()方法,
//其原因可以归结为实例与原型之间的松散连接关系,当我调用 firend.sayHi()方法时,会在实例中搜索 sayHi
属性,在没找到的情况下,会继续搜索原型,因为实例与原型之间的连接是一个指针,不是副本,因此就可以在原型中找到sayHi,
并返回保存在那的函数。



function Person2(){
}
var firend2=new Person2();
Person2.prototype={
constructor:Person2,
name:"summer2",
age:25,
job:"enginner2",
sayName2:function(){
alert(this.name);
}
}
firend2.sayName2();// 报错 : firend2.sayName2 is not a function

// 上面的例子重写了整个原型对象,我们知道,调用构造函数时,会为实例添加一个指向最初原型的(prototype)指针,
//而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系,请记住:实例中的指针紧指向原型,而不指向构造函数
原文地址:https://www.cnblogs.com/liululu/p/5830116.html