首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

使用Object.create(null)创建对象时,proto属性不会被创建。proto属性是用来指向对象的原型的,它是JavaScript中的一个内置属性。当使用Object.create(null)创建对象时,该对象不会继承任何属性和方法,也不会有原型链。这意味着该对象是一个纯净的空对象,没有任何默认的属性和方法。

由于proto属性不会被创建,因此无法通过该属性来访问或修改对象的原型。这也意味着无法通过该对象来继承其他对象的属性和方法。

使用Object.create(null)创建的对象适用于一些特殊的场景,例如需要一个纯净的空对象来存储数据,而不希望继承任何属性和方法。这样可以避免潜在的命名冲突或属性覆盖的问题。

腾讯云相关产品中,与对象存储相关的产品是腾讯云对象存储(COS)。腾讯云对象存储(COS)是一种安全、高可靠、低成本的云存储服务,适用于存储和处理大规模非结构化数据。您可以通过以下链接了解更多关于腾讯云对象存储(COS)的信息:

腾讯云对象存储(COS)产品介绍:https://cloud.tencent.com/product/cos

请注意,以上答案仅供参考,具体的技术细节和产品信息建议您参考官方文档或咨询相关专业人士。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

javascript设计模式五:原型模式

所以在使用javascript,始终要记清基于原型,基于原型,基于原型。...在es5前,生成对象的原型只能达到Object.prototype,但es5出来后,js中新出个Object.create()方法可以创建以任意对象为原型的对象了,换言之,最高我们可以创建null为原型对象对象了...Object.create(null),其用处广泛,例如在Vue和Vuex的源码中,作者都使用Object.create(null)来初始化一个新对象,而非使用{}。...虽然Object.create()非常好用,但是并非所有浏览器版本均支持,所以在使用该方法,可以通过以下方法兼容: Object.create = Object.create || function(...那么对象如何顺利的把请求委托给自己构造器的原型呢?就要提到上文说到的隐藏属性原型链了__proto__,某个对象的__proto__默认会指向其构造器的原型上,伪代码表示为new F().

30420

JS 原生方法原理探究(二):如何实现 Object.create

本文会介绍如何实现 Object.create() 方法。关于这个方法的具体用法,MDN 已经描述得很清楚了,这里我们只做简单的介绍,具体的重点在于如何模拟实现。...语法简介 调用:Object.create ( proto , propertiesObject ) 返回: 一个新的实例对象 调用这个方法的时候接受两个参数,第一个参数作为返回对象的 __proto_...这似乎说明,用 null 重写 F 的原型后,新创建的实例的 __proto__ 并不是 null —— 事实上确实不是。...由于我们这里是通过 new 构造函数的方式创建对象(而不是像之前那样通过对象字面量的形式),所以在 new F 的时候,内部会检测 F 的原型是不是对象,如果不是对象,那么会把实例的 __proto_...因此,这里新创建的实例的 __proto__ 还真不是 null。 但根据 Object.create 的实现规范,这里必须让实例的 __proto__ 指向 null,所以才需要执行 obj.

1.9K21
  • 你的手写 new 实现足够严谨吗?

    // 创建一个没有原型对象对象Object.create(null) obj....这里可以看到:用 null 重写构造函数的原型后,通过 new 构造函数创建的实例的 __proto__ 并没有跟着变成 null,而是指向了 Object.prototype。...returnValue : instance } 这里直接使用Object.create() 方法,是有问题的。...在前面阅读规范的时候我们已经知道了,即使传给 Object.create 的参数是 null,也会将其作为创建对象的 __proto__,所以这里如果使用Object.create,并且构造函数的原型...所以,如果想实现一个更加严谨的 new,那么就不应该在内部去调用 Object.create 方法,而应该选择手动创建一个对象并和构造函数建立原型关系,同时,我们还应该加入对构造函数原型的类型判断,看它到底是不是一个对象

    52110

    面试官问:JS的继承

    new做了什么: 创建了一个全新的对象。 这个对象会被执行 [[Prototype]](也就是 __proto__)链接。 生成的新对象会绑定到函数调用的 this。...通过 new创建的每个对象将最终被 [[Prototype]]链接到这个函数的 prototype对象上。...Object.create ES5提供的 Object.create(proto,[propertiesObject]) 方法创建一个新对象使用现有的对象来提供新创建对象的proto。...// Object.create()方法创建一个新对象使用现有的对象来提供新创建对象的__proto__。...继承方法可以有很多,重点在于必须理解并熟 悉这些对象、原型以及构造器的工作方式,剩下的就简单了。寄生组合式继承是开发者使用比较多的。回顾寄生组合式继承。

    74510

    为什么 JS 中的对象字面量很酷

    对象创建,配置和访问原型,必须提供一种易于构造的语言。 定义一个对象并设置它的原型是一个常见的任务。最好的方式是直接在对象字面量使用一条语句来设置原型。...与创建原型 myProto,这次咱们使用一条语句就创建,没有像上面还需要 object.create() 这样的附加函数。...当然,尝试使用基本类型来设置对象的原型也会很奇怪。 当对象字面具有计算结果为'__proto__'的字符串 {['__proto__']:protoObj },也要小心。...以这种方式创建的属性不会更改对象的原型,而只是使用键 '__proto__' 创建一个拥有的属性 简写方法定义 可以使用较短的语法在对象常量中声明方法,以省略 function 关键字和 : 冒号的方式...可以使用__proto__ 属性名称直接从初始化器设置对象的原型。 这比使用 Object.create() 更容易。 请注意,__proto__ 是 ES6 标准附件B的一部分,不鼓励使用

    1.1K10

    一篇JavaScript技术栈带你了解继承和原型链

    在JavaScript中,当我们使用new来创建一个对象的时候,JavaScript引擎就会自动为这个对象添加一个__proto__属性,并指向其类的prototype。...,使用对象字面量创建对象,会隐式的指向Object.prototype为新对象的[[Prototype]],使用Object.create()方法创建对象,会显示指定新对象的[[Prototype]...,创建对象使用构造函数创建 var obj = new Object(); 字面量创建: var obj = {}; 工厂模式: var p1 = new Object(); p1.name = 'da...该原型对象也有一个自己的原型对象__proto__,层层向上直到一个对象的原型对象null。...= "bar"; console.log( doSomething.prototype ); 使用Object.create创建对象 var a = {a: 1}; // a ---> Object.prototype

    45510

    我不知道的前端(二)

    ---- 创建对象Object.create() 这种创建对象的形式和正常创建有什么区别? 这就涉及原型的概念,说原型你可能不熟悉,但是prototype你应该听过。...Object.create()的强悍之处在于,它可以以任意原型创建一个新的对象, 比如这样 Object.create({head:'Hello',body:'prototype'}) 或者这样 Object.create...(null) 可以看到我们用null作为参数,打印出来直接就没有属性,这意味着这个Object是完完全全空的,它没有在Object这里继承任何东西; 而如果我们要创建一个普通的空对象(常规定义方法是...我们使用Date、Object的时候,其实使用的类似于new Array()这样的语句创建对象就是以Array.prototype为原型,通过new Date()创建对象也是以Date.prototype...__proto__ === Function.prototype 对象的__proto__属性是创建对象自动添加的,默认值为其构造函数的prototype; 原型链的继承关系 我们上边也试着看了一下

    39220

    深入理解JavaScript原型:prototype,__proto__和constructor

    以上写法可以满足大部分简单需求,比如创建一个Cat类的实例对象cat_1,此时如果使用instanceof判断会得到以下结果: cat_1 instanceof Cat; // true cat_1 instanceof...简单来说:prototype属性是可以作为构造函数的函数对象才具备的属性,__proto__属性是任何对象(除了null)都具备的属性,两者的指向都是其所属类的原型对象,也就是下文提到的内部属性[[Prototype...__proto__属性除了null以外的对象都具备的一个属性,其指向与构造函数的prototype相同。...这个问题根据上文提到的instanceof的工作原理很容易解答,派生类ChildA和ChildB的prototype是同一个对象使用instanceof判断各自实例继承归属,得到的结果自然是相同的。...前文提到,创建了构造函数便是创建了同名类,随后在改变一个对象的原型,只是改变了类的这个属性,而构造函数是类的静态成员,保持不变。 另外,在修改对象原型,不建议使用直接赋值的方式。

    82980

    深入理解原型和继承

    __proto__属性在 ES6 才被标准化,以确保 Web 浏览器的兼容性,但是不推荐使用,更不推荐通过这种方式修改实例的原型,除了标准化的原因之外还有性能问题。...在这种情况下,先前的实例对象可以使用最初原型的方法,新的实例对象可以使用重写的原型的方法。 5. new 和 Object.create(): 这里,让我们回到文章开头提到的创建对象的三种方式。...手动实现new(方法一): 下面根据new的工作原理通过代码手动实现一下new运算符 var new2 = function (func) { //创建一个空对象,并链接到原型...5.2 Object.create() Object.create()方法创建一个新对象(实例),并使用现有的对象(参数)作为新创建对象的proto 也就是说,这个方法可以起到指定原型的作用。...实例化一个对象并返回 这里,如果Object.create()接受的参数是null,即var obj = Object.create(null),则obj是真正意义上的空对象,不具有hasOwnProperty

    45920

    Javascript 原型链

    该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。...[[Prototype]] 为 null,停止搜索 // 找不到 d 属性,返回 undefined使用不同的方法来创建对象和生成原型链使用语法结构创建对象 2.JavaScript 对象有一个指向一个原型对象的链...使用构造器创建对象 使用new 关键字: (1) 创建一个空的简单JavaScript对象(即{}); (2)为新创建对象添加属性__proto__,将该属性链接至构造函数的原型对象 (构造函数的原型对象的...使用 Object.create 创建对象 ECMAScript 5 中引入了一个新方法:Object.create()。可以调用这个方法来创建一个新对象。...新对象的原型就是调用 create 方法传入的第一个参数。

    57630

    一篇JavaScript技术栈带你了解继承和原型链

    在JavaScript中,当我们使用new来创建一个对象的时候,JavaScript引擎就会自动为这个对象添加一个__proto__属性,并指向其类的prototype。...4 对象的继承,使用对象字面量创建对象,会隐式的指向Object.prototype为新对象的[[Prototype]],使用Object.create()方法创建对象,会显示指定新对象的[[Prototype...,创建对象使用构造函数创建 var obj = new Object(); 字面量创建: var obj = {}; 工厂模式: var p1 = new Object(); p1.name = 'da...该原型对象也有一个自己的原型对象__proto__,层层向上直到一个对象的原型对象null。...= "bar"; console.log( doSomething.prototype ); 使用Object.create创建对象 var a = {a: 1}; // a ---> Object.prototype

    36410

    彻底弄懂JS原型与原型链

    __proto__ === null我们就可以换个方式描述下 原型链 :由对象的__proto__属性串连起来的直到Object.prototype.__proto__(为null)的链就是原型链。...__proto__为null,返回undefined return undefined }}六、constructor回忆一下之前的描述,构造函数都有一个prototype属性,指向使用这个构造函数创建对象实例的原型对象...对象都是由构造函数创建对象的__proto__属性指向其原型对象,构造函数的prototype属性指向其创建对象实例的原型对象,所以对象的__proto__属性等于创建它的构造函数的prototype...如果想要生成一个不继承任何属性的对象,可以使用Object.create(null)。...= {}3. new操作符当我们使用new,做了些什么?

    1.1K40

    js中的原型和原型链

    __proto__ === Object.prototype) // true 三、__proto__扩展 不再推荐使用该特性。...第一个参数是:要设置其原型的对象;第二个参数是:该对象的新原型(一个对象null)。...SuperHero.prototype, Human.prototype); let hero = new SuperHero('zs', 2); console.log(hero.getName()) // zs // 注意:如果使用创建的话可以直接使用...extend 关键字实现继承 Object.create() Object.create() 方法用于创建一个新对象使用现有的对象来作为新创建对象的原型(prototype),返回一个带着指定原型对象的新对象...__proto__ === Function.prototype) // true 2.关于实例对象的 __proto__ 实例对象的 __proto__ 指向创建这个实例对象的构造函数,这个知识点大家都应该没得问题

    1.1K00

    JavaScript入门总结——第二弹学习对象,分清__proto__、prototype

    定义对象: 定义对象主要有四种方法:对象直接量、通过new创建对象、原型创建法、Object.create()方法 (1)对象直接量:这个就是上图中的创建方式,直接通过字符创建对象,简单写出来就是:var...()方法来创建对象,这种创建方法要先保证有一个现有对象,如已经存在一个rabbit1对象,通过rabbit1我们创建了一个rabbit2对象:var rabbit2 = Object.create(rabbit1...); 对象属性: 还记得对象直接量创建对象的{}吗,{}可以盛装key:value键值对,对象属性就是写在这里。...如下图构造函数Girlfriend的prototype指向的就是创建的gf的原型,原型是对象创建与另一个对象产生的关联,也就是实例原型 ?...__proto__: 隐式原型,当访问一个对象的属性,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null

    46930

    原型链

    每个实例对象(object)都有一个私有属性(__proto__)指向其构造函数的原型对象(prototype)。该原型对象也有自己的原型对象,层层向上直到一个对象的原型对象null。...当试图访问一个对象的属性,还会搜索该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或者到达原型链的末尾。...[[prototype]]为null,停止搜索 // 找不到d属性返回undefined 使用不同的方法来创建对象和生成原型链 ---- (1)使用语法结构创建对象 var o = {a: 1}; /...(2)使用构造器创建对象 在JS中,构造器其实就是一个普通的函数,当使用new 操作符来调用这个函数,他就可以被称为构造方法(构造函数)。...[[prototype]]指向了Graph.prototype (3)使用Object.create创建对象 可以调用Object.create()创建一个对象,新对象的原型就是传入的第一个参数。

    42520

    一道题串联原型链易混淆点的整理

    [[Prototype]](也就是__proto__):是一个特殊的内置属性,几乎所有对象创建的时候就有了这个[[Prototype]],在有些浏览器下会通过__proto__暴露出来(否则要通过Object.getPrototypeof...而这里说的对象,是不限于平时所说的Object类型,而是通过一个构造函数创建出来的都算,他们都有__proto__。...__proto__指向 除了用Object.create 创建对象,其他对象的__proto__指向这个对象的构造函数的prototype。 3....(LivingThing.prototype) // Object.create()方法创建一个新对象使用现有的对象来提供新创建对象的__proto__ // 也就是Person.prototype...__proto__应该指向对象的构造函数Object的prototype,这样就形成了一个循环。 所以这里是一个例外,Object.prototype.__proto__默认是指向null的。

    42200

    动图学 JavaScript 之:原型继承

    如果继续进行下去,你可能会注意到,当我展开 Dog.prototype 的 __proto__ 对象,我没有包含一个属性。...一切都是以相同的方式工作! 我们使用 class 关键字来定义类。每个类都有一个 constructor 函数,基本上对应了 ES6 中构造函数的写法。...最终会有一个原型等于 null对象:它就是 Object.prototype。如果我们试图访问在本地或者原型链上都不存在的属性,最终会返回 undefined。 ?...Object.create 尽管上面已经解释了构造函数和类,其实还有一个为对象添加原型的方式是使用 Object.create 方法。...通过这个方法,我们创建了一个新对象,并且指明了这个对象的原型是什么。 只需要将一个已经存在的对象传入 Object.create 方法中。创建出来的对象就是以我们传入的对象作为原型。看例子: ?

    55920
    领券