Javascript Object.create()的默认行为
我试图了解对象创建是如何工作的,以及使用Javascript Object.create()的默认行为,javascript,object,Javascript,Object,我试图了解对象创建是如何工作的,以及使用object.create()创建的对象的相应原型。我有以下代码: var obj = Object.create({name: "someValue"}); console.log(Object.getPrototypeOf(obj)); // => Object{name: "someValue"} console.log(obj.constructor.prototype); // => Object{} // check if o
object.create()
创建的对象的相应原型。我有以下代码:
var obj = Object.create({name: "someValue"});
console.log(Object.getPrototypeOf(obj)); // => Object{name: "someValue"}
console.log(obj.constructor.prototype); // => Object{}
// check if obj inherits from Object.prototype
Object.prototype.isPrototypeOf(obj); // => true
既然对象{name:“someValue”}
本身继承自object.prototype,那么断言最后一行代码返回true是否正确?对此有更好的解释吗?它的规范规定isPrototypeOf检查链,而不仅仅是父链:
重复
obj => Object {name:"someValue"} => Object {} => null
/ \
|
\ -- This guy is Object.prototype
通过使用object.create
创建一个对象并将null作为参数传递,可以用代码验证它
var obj = Object.create(null);
Object.prototype.isPrototypeOf(obj); //false
这里,因为我们传递的是
null
而不是对象,所以它本身没有object.prototype作为原型,所以我们得到false
只是一个注释,另一种验证这种情况的方法是执行object.getPrototypeOf(object.getPrototypeOf(obj))==object.prototype
Object.prototype
表示在执行new Object()
或更常见的直接文字表示法时调用的对象的原型。请注意,Benjamin Grunbaum使用的嵌套函数调用样式是可能的,因为Object.getPrototypeOf()
返回一个对象。