function的原型对象的动态性
<script> //创建一个自定义构造函数 function Person(){ } //通过new 关键字获取到函数的对象
//此时的obj变量内容是一个指向 function Person() 构造函数的原型对象(__proptype__)的地址
var obj = new Person();
//在 function Person的原型上添加属性,
Person.prototype.name = 'taotao';
Person.prototype.age = 10;
Person.prototype.getHello= function(){ alert(this.name)};
//调用Person 实例对象,可以实现打印taotao
obj.getHello()
//2如果给原型从新指向一个新的属性对象再去调用,就会把原型对象重新指向一个新的对象地址,
//而实例对象的obj 还是指向上没有赋值新属性对象的原型地址,在实例对象后面修改原型对象,
//导致实例对象调用不到后修改的原型对象
//创建一个自定义构造函数 function Person(){ } //通过new 关键字获取到函数的对象
//此时的obj变量内容是一个指向 function Person() 构造函数的原型对象(__proptype__)的地址
var obj = new Person();
//在 function Person的原型上重新赋值,会导致开辟新的内存空间,导致prototype的指向的地址更改,
//而实例对向obj地址没有改变,故找不到对应的属性
Person.prototype = {
name : 'taotao',
age :10,
getHello:function(){ alert(this.name)
constructor:Person
}
//调用Person 实例对象,可以实现打印会出现错误, hetHello undefined
obj.getHello()
//3 如何解决上面的问题
// 只需要修改一下new Person() 与 Person.prototype 赋值的实例,
// 这样在obj = new Persion(), obj 指向的地址就是Person.prototype
// 修改后的地址
function Person(){ }
Person.prototype = {
name : 'taotao',
age :10,
getHello:function(){ alert(this.name)
constructor:Person
}
var obj = new Person();
obj.getHello()
</script>
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289150.html