我正试图通过使用Chrome开发者控制台来了解原型继承。这是我用来设置原型链的代码:
var Organism = Object.create(null);
undefined
var Animal = Object.create(Organism);
undefined
var Mammal = Object.create(Animal);
undefined
var Dog = Object.create(Mammal);
undefined
var Spot = Object.create(Dog);
undefined
我可以为Organism和Mammal Objects添加一些属性:
Mammal.hasHair = true;
true
Organism.hasHair = false;
false
接下来,我为Dog对象定义了一些变量:
Dog.numLegs = 4;
4
Dog.speak = function(){return 'woof, woof!';};
function (){return 'woof, woof!';}
最后我为Spot
定义了一些变量Spot.color = 'White';
"White"
Spot.pattern = 'Spots';
"Spots"
Spot.patternColor = 'Black';
"Black"
Spot.weight = 22
22
然而出于某种原因,当我检查狗对象它输出这样的属性,我看不到它的原型......
Spot;
Object {color: "White", pattern: "Spots", patternColor: "Black", weight: 22}
或者如果我尝试这个,我仍然看不到它的原型......
dir(Spot);
Object
color: "White"
pattern: "Spots"
patternColor: "Black"
weight: 22
如果我没有记错的话,我是不是应该有一个名为_proto_
的属性,它会指向哺乳动物狗对象的原型?如何检查对象以查看此属性?
答案 0 :(得分:2)
您需要使用Object构造函数的原型来创建第一个对象,如下所示:
var Organism = Object.create(Object.prototype);
创建一个以null作为原型的对象将创建一个完全没有属性的对象,包括_proto_
有关Object.create的详细信息,请查看: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
答案 1 :(得分:1)
使用var Organism = new Object(null);
等会创建一个原型对象,并按预期工作。
不要完全理解这一点,但看起来这是因为没有构造函数就没有创建原型。因此,在构建new Object()
时,您将创建一个原型。但是,Object.create()
只返回一个对象,如果您尝试new Object.create()
,则表明它不是构造函数。
值得阅读构造函数和原型: http://tobyho.com/2010/11/22/javascript-constructors-and/
我欢迎更全面的回答,因为我也希望在返回的对象中有原型。按照你的步骤,我复制了相同的结果。