Javascript 理解原型遗传
当我检查prototype是否等于Javascript 理解原型遗传,javascript,object,inheritance,prototypal,Javascript,Object,Inheritance,Prototypal,当我检查prototype是否等于对象时。prototype: 前两个返回true,而第三个返回false 为什么会这样 var Object1 = {}; var Object2 = new Object(); var Object3 = Object.create({}); 方法创建具有指定原型对象和属性的新对象 它在幕后做了以下工作: Object.getPrototypeOf(Object1)===Object.prototype //true Object.getPrototypeO
对象时。prototype
:
前两个返回true
,而第三个返回false
为什么会这样
var Object1 = {};
var Object2 = new Object();
var Object3 = Object.create({});
方法创建具有指定原型对象和属性的新对象
它在幕后做了以下工作:
Object.getPrototypeOf(Object1)===Object.prototype //true
Object.getPrototypeOf(Object2)===Object.prototype //true
Object.getPrototypeOf(Object3)===Object.prototype //false
因此,正确的用途是:
Object.create = (function() {
var Temp = function() {};
return function (prototype) {
if (arguments.length > 1) {
throw Error('Second argument not supported');
}
if (typeof prototype != 'object') {
throw TypeError('Argument must be an object');
}
Temp.prototype = prototype;
var result = new Temp();
Temp.prototype = null;
return result;
};
})();
或者,如果您想让您的示例发挥作用:
var Object3 = Object.create(Object.prototype);
在这里,原型链开始发挥作用:
Object.getPrototypeOf(Object.getPrototypeOf(Object3)) === Object.prototype // true
原因很简单,如果您查看文档中的,您会发现此方法: 使用指定的原型对象和 财产 如果你把它叫做:
console.dir(Object3)
-> __proto__: Object (=== Your Object Literal)
-> __proto__: Object (=== Object.prototype)
您传递的不是原型,而是没有属性的空对象
因此,如评论中所述,您需要这样称呼它:
Object.create({})
尝试
Object.create(Object.prototype)
但为什么会发生这种情况?因为{}!=Object.prototype
(其中{}
是您用作Object3
原型的对象)
Object.create(Object.prototype)