当前位置: 首页 > 知识库问答 >
问题:

当使用object.create(null)创建对象时__proto__如何工作

年凯康
2023-03-14

考虑下面的javascript代码

var a = Object.create(null);
a.foo = 1;
var b = Object.create(a);
console.log(b.foo);  //prints 1
console.log(b.__proto__);  //prints undefined
b.__proto__ = null;
console.log(b.__proto__);  //prints null
console.log(b.foo);  //prints 1

有人能解释对象b如何在将b.__proto__设置为null之后访问a的“foo”属性吗?用于访问A属性的内部链接是什么?

我试图通过搜索寻找可能的解释,但找不到JavaScript这种特殊行为的任何解释。

共有1个答案

钮巴英
2023-03-14

问题是您正在使用不推荐使用的__proto__属性,它是object.prototype上的getter/setter-但是您的对象并不继承该属性,所以它首先是undefined,赋值创建了一个名为__proto__的标准属性。

使用正确的object.getPrototypeOf/object.setPrototypeOf,代码将执行预期的操作:

var a = Object.create(null);
a.foo = 1;
var b = Object.create(a);
console.log(b.foo); // 1
console.log(Object.getPrototypeOf(b)); // {foo:1} - a
Object.setPrototypeOf(b, null);
console.log(Object.getPrototypeOf(b)); // null
console.log(b.foo); // undefined
 类似资料:
  • 本文向大家介绍一种新的javascript对象创建方式Object.create(),包括了一种新的javascript对象创建方式Object.create()的使用技巧和注意事项,需要的朋友参考一下 Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不

  • 问题内容: 我需要使用NDK以及JNI将一些功能实现到Android应用程序中。 这是我所写的C代码: 我的问题或多或少在代码内得到了解释。也许还可以:函数(jobject)的返回类型可以吗? 现在,NDKTest.java: 当我尝试运行代码时,它不起作用。 问题答案: 既然是内部类,那么获得它的方法就是 内部类的约定在权威规范中并未真正明确记录,但是根深蒂固地存在于如此多的工作代码中,因此不太

  • 问题内容: 我想使用String创建一个JSON对象。 示例:JSON 为了创建上述JSON,我正在使用它。 我想知道如何创建一个具有JSON数组的JSON。 以下是示例JSON。 谢谢。 问题答案: 可能就是您想要的。

  • 问题内容: 我试图通过传递另一个jsonObject与jsonObject转换jsonArray。请提供任何示例代码? 问题答案: 这样,您可以为响应编写POJO / Model类 ----------------------------------- com.example.HomePlace.java -------- ----------------------------------- c

  • 问题内容: 基本上这就是问题,应该如何用javascript动态地从HTML字符串构造一个Document对象? 问题答案: 规范中定义了两种方法,分别2和HTML5。前者创建一个XML文档(包括XHTML),后者创建一个HTML文档。两者都作为功能驻留在接口上。 实际上,这些方法还很年轻,仅在最近的浏览器版本中实现。根据http://quirksmode.org和MDN的说明,以下浏览器支持:

  • 我试图从字符串数组中创建一个新对象,但无法正确创建所需的对象。 我正在尝试创建一个对象,比如: 这是我的代码: null null