- 主题:问个js原型继承的问题
【 在 blitz (blitz) 的大作中提到: 】
: 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" in d1 -> true
"name" in d2 -> true
"name" in Derived.prototype -> false
"name" in Object.getPrototypeOf(d1) -> false
"name" in Object.getPrototypeOf(d2) -> false
: 这个name显然来自于Derived.prototype.name,但又不是同一个,因为对d1的修改并不影响d2。
({}).hasOwnProperty.call(d1, "name") -> true
--
FROM 183.195.251.*
oh shit
【 在 blitz (blitz) 的大作中提到: 】
: 你这几个判断,我机器上的输出都是true啊,环境时node -v =>v6.1.0
: 测试代码:
: "use strict";
: function Base(name)
: {
: this.name=name
: }
: function Derived(name,age)
: {
: //Base.call(this,name);
: this.age=age
: }
: Derived.prototype=new Base("aaa")
this is not what is conventionally called "Derived is derived from Base",
so in practice never use this
if you have a very good reason to stack up prototype chain like this, at
least name the functions differently
: var d1=new Derived("name1",22);
: var d2=new Derived("name2",23);
: console.log("name" in d1)
: console.log("name" in d2)
: console.log("name" in Derived.prototype)
: console.log("name" in Object.getPrototypeOf(d1))
: console.log("name" in Object.getPrototypeOf(d2))
--
FROM 180.173.163.*
【 在 zzjyingzi (十六点五) 的大作中提到: 】
: 俄,是····
: func a(){};
: func b(){};
: func c(){};
: b.prototype = new a();
: c.prototype = new a();
: 是为了让b和c继承a的属性。
: 更改b.prototype或者c.prototype,不会相互影响。
conventionally we say "b.prototype = Object.create(a.prototype)", maybe
also adding "b.prototype.constructor = b"
: 而
: var d1=new Derived("name1",21);
: var d2=new Derived("name2",22);
: d1 d2是两个实例对象,他们之间只是同一对象原型的下级,除此之外没关系。
--
FROM 183.195.251.*
function find(o, name) {
var p = o;
while (p) {
if (p has own property name)
return own property name of p;
p = Object.getPrototypeOf(p);
}
}
【 在 shaolin (我的大小宝贝儿...) 的大作中提到: 】
: js中寻找一个instance的属性,先从instance中找,没有则往其constructor(class)
: 的prototype中找,还没有,则一直往其parent class的prototype中找,
: 直到object ..
: ...................
--
FROM 183.195.251.*