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检查链,而不仅仅是父链:

重复

  • 设V为V的[[Prototype]]内部属性的值

  • 如果V为null,则返回false

  • 如果O和V引用同一对象,则返回true

  • 你的断言完全正确。创建的原型链的格式为:

    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()
    返回一个
    对象。