function Person(){
}
var friend = new Person();
Person.prototype.constructor = Person;
Person.prototype.name = "Nima";
Person.prototype.age = 23;
alert(friend.name);
这样写friend.name可以正常显示;
function Person(){
}
var friend = new Person();
Person.prototype = {
constructor:Person,
name : "Nima",
age : 23
}
alert(friend.name);
这样写friend.name则是undefined;
原因是Person.prototype.name,这么写相当于在原型对象中加了新的属性,实例的指针指向prototype还是没变的,所以可以显示name。但是Person.prototype = { ... }这么写,相当于是重写了原型对象,那么刚才的实例中的指针就失效了,所以name是undefined。
这样理解没错吧?
但是,
这个例子中:
var obj = {
name : 'Linken',
gender :'male',
age : 23,
id : 'teacher'
}
var a = obj;
obj = {
gender :'male',
age : 23,
id : 1234
}
alert(a.name);
为什么a.name依然可以正常弹出???
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看图体会:


代码从上至下依次执行,a指向之前的obj,新的obj相当于重新创建了一个对象。
因为a引用的还是
并不会随着obj变化的
补充一下
这句话是有问题的,是Person.prototype本该指向的是原型对象,却被更改了
我试了你举得例子
不论是 .prototype.name = 的形式 还是 .prototype={name:} 的形式
在new 的对象中均可以访问到 name 属性