初学js,有个问题想请教一下,关于 js的prototype-based inheritance
具体说来,我对当object里面含有数据成员的时候,derived-type的constructor的prototype应该怎么设置感到疑惑,例如
function Base(name)
{
this.name=name
}
function Derived(name,age)
{
this.name=name; //#1
this.age=age;
}
Derived.prototype=new Base
那么所有的以var d=new Derived("name",12);方式构造的object,都共享同一个__proto__,而这样的话用d.name去修改数值,似乎会影响其他d的name字段。
但经过我的实验,似乎并不会发生这种事情
var d1=new Derived("name1",21);
var d2=new Derived("name2",22);
d1.name="new name"
d2.name!=="new name" //true
那么请问Derived.prototype=new Base这个语句到底干了什么?如果我把#1那行的代码注掉,d1/d2里仍然会有name字段,尽管是undefined:
'name' in d1;//will return true
这个name显然来自于Derived.prototype.name,但又不是同一个,因为对d1的修改并不影响d2。
--
FROM 159.226.171.*