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

为什么在array.push中调用Object.create会返回一个空对象列表?

在array.push中调用Object.create会返回一个空对象列表的原因是因为Object.create方法创建了一个新的对象,并将该对象的原型设置为传入的参数。在这种情况下,传入的参数是一个空对象。当我们调用array.push方法时,它会将传入的参数添加到数组的末尾。由于Object.create返回的是一个新的对象,而不是一个具体的值,所以在数组中添加的是这个新对象的引用。

具体来说,Object.create方法接受一个参数,用于指定新对象的原型。当我们传入一个空对象作为参数时,Object.create会创建一个没有任何属性和方法的空对象,并将其原型设置为传入的空对象。这样,通过Object.create创建的新对象就成为了一个空对象列表。

在array.push方法中调用Object.create返回的空对象列表可能会导致一些问题。由于这个空对象没有任何属性和方法,所以在使用这个对象时可能会出现错误。如果我们希望在数组中添加一个具体的值,而不是一个空对象列表,可以使用其他方法或直接将具体的值传递给array.push。

需要注意的是,以上答案是基于一般情况下的理解和推测,具体实现可能会因编程语言、框架或其他因素而有所不同。

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

相关·内容

JS葵花宝典秘籍笔记,为你保驾护航金三银四

使用 Object.create 的 propertyObject参数 var o; // 创建一个原型为null的对象 o = Object.create(null); o = {}; //...var foo: string = null // 可以是字符串,也可以是null Vue项目中为什么要在列表组件写key,其作用是什么 key是给每个vnode的唯一的id,可以依靠key,更准确,...指定的参数列表返回值 使用调用者提供的 this 值和参数调用该函数的返回值。若该方法没有返回值,则返回 undefined。...从ECMAScript 5 开始可以使用类数组对象返回调用有指定this值和参数的函数的结果。 描述 调用一个存在的函数时,你可以为其指定一个 this 对象。...this 指当前对象,也就是正在调用这个函数的对象。 使用 apply, 你可以只写一次这个方法然后一个对象中继承它,而不用在新对象重复写该方法。

1.7K10

JS 原生方法原理探究(三):如何实现 new 操作符?

ref 接着调用 GetValue(ref) 进行求值,得到实际的函数对象,把这个对象作为 constructor 对 Arguments 也就是传进来的参数求值,得到一个参数列表,作为 argList...[[Constructor]] 的规范 JS ,函数有两种调用方式,一种是正常调用,这将调用函数的内部方法 [[Call]],还有一种是通过 new 调用,此时的函数作为一个构造函数,这将调用函数的另一个内部方法...简单翻译一下: 当通过可能为的参数列表调用函数 F 的内部方法 [[Construct]] 的时候,执行如下步骤: 让 obj 作为一个新创建的原生对象 按照规范指定的,为 obj 设置所有内部方法...将调用后得到的结果作为 result 如果 result 是对象,则将其返回 否则,返回 obj 可以说,规范已经讲得很清楚了,简单地说, new 一个构造函数的时候,具体会做下面的事情: 内部创建一个实例对象...prototype 将实例对象绑定为构造函数的 this,此前传递进来的参数作为参数,并执行一遍构造函数 如果构造函数返回对象,则将其作为返回值,否则将实例对象作为返回值 代码实现 ES3 版本的实现如下

1K20

8个问题看你是否真的懂 JS

浏览器是JavaScript的主要运行的地方,两者我们的服务协同工作。JS有一些概念,人们往往会对它掉以轻心,有时可能忽略不计。...这就是为什么它们循环结束时返回相同的值'3'。...3、然后将foo回调函数传递给WebAPIs(箭头1)并从函数返回调用堆栈再次为 4、计时器被设置为0,因此foo将被发送到任务队列(箭头2)。...Mozilla文档,如果一个对象实现了@@iterator方法,那么它就是可迭代的,这意味着这个对象(或者它原型链上的一个对象)必须有一个带有@@iterator键的属性,这个键可以通过常量Symbol.iterator...因此,foo.getx()的例子,它指向foo对象返回90的值。而在xGetter()的情况下,this指向 window对象, 返回 window 的x的值,即10。

1.3K30

理论+实践:从原型链到继承模式,掌握 Object 的精髓(二)

构造函数 function Foo(){ // } var a = new Foo(); • 以上代码为什么让我们认为 Foo 是一个类呢?...但是当你普通的函数调用前加上 new 关键字后,就会把当前函数编程一个构造函数调用。实际上,new 劫持所有普通函数并用构造对象的形式来调用它。...的构造函数调用会生成 .prototype 和 .constructor 引用) • 注意:Object.create(null) 创建一个链接的对象,因为是的,所有无法进行委托,并且由于这个对象没有原型链...,使用 instanceof 时也就无法进行判断,因此他们总是返回 false。...Object.create(null) 创建一个链接的对象,因为是的,所有无法进行委托,并且由于这个对象没有原型链,使用 instanceof 时也就无法进行判断,因此他们总是返回 false

6510

8个问题看你是否真的懂 JS

浏览器是JavaScript的主要运行的地方,两者我们的服务协同工作。JS有一些概念,人们往往会对它掉以轻心,有时可能忽略不计。...这就是为什么它们循环结束时返回相同的值'3'。...然后将 foo回调函数传递给WebAPIs(箭头1)并从函数返回调用堆栈再次为 计时器被设置为0,因此 foo将被发送到任务队列(箭头2)。...Mozilla文档,如果一个对象实现了 @@iterator方法,那么它就是可迭代的,这意味着这个对象(或者它原型链上的一个对象)必须有一个带有 @@iterator键的属性,这个键可以通过常量 Symbol.iterator...因此, foo.getx()的例子,它指向 foo对象返回 90的值。而在 xGetter()的情况下, this指向 window对象, 返回 window 的 x的值,即 10。

1.3K10

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

本文介绍如何实现 Object.create() 方法。关于这个方法的具体用法,MDN 已经描述得很清楚了,这里我们只做简单的介绍,具体的重点在于如何模拟实现。...语法简介 调用Object.create ( proto , propertiesObject ) 返回一个新的实例对象 调用这个方法的时候接受两个参数,第一个参数作为返回对象的 __proto_...我简单翻译一下这段话: create() 方法会创建一个具有指定原型的新对象,当调用该方法的时候,会有如下步骤: 如果传入的参数 O 不是对象也不是 null,抛出 TypeError 错误 令 obj...不过,我们要留意两个地方: 在这个实现,没有检测第一个参数是不是基本类型的包装对象,只要传进来的参数是对象,我们就认为是合法的 当传入 null 也即 Object.create(null) 的时候,...我们实际上创建了一个很纯粹的对象,这个对象的原型直接就是 null,Object.prototype 甚至没有出现在该对象的原型链,这意味这个对象不会继承 Object 的任何方法。

1.8K21

JavaScript 面向对象

使用 new Foo(); 创建对象实例时。this 会指向一个对象,并且这个对象的原型会指向 Foo.prototype 属性。this.y = 2 给这个对象赋值,并把这个对象返回。...Object.create(arg) 创建一个对象,并且这个对象的原型指向参数 arg。...创建了一个对象,并且对象的原型指向参数 Person.prototype。这样便实现了继承。同时原型链写,不向上查找。...返回这个 ClassManager 的实例。这样这个实例又可以继续调用方法。 ---- 抽象类 构造器 throw new Error(''); 抛异常。这样防止这个类被直接调用。...已经原课程下提问了,期待老师的讲解。 抽象类中子类为什么不能调用父类的非抽象方法? 问题已经解决了,应该是老师当时的课件写错了,应该再基类中将这两个方法写在其原型 prototype 上。

24620

深入理解原型和继承

这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。...__proto__=M.prototype M.call(o) 第一步,创建一个对象o; 第二步,令对象的proto指向构造函数M的prototype; 第三步,令构造函数M的this指针指向o,...但是arguments是类数组的对象,无法直接使用这个方法,所以我们使用[].shift.call(arguments),意思是从参数列表(包括构造函数、构造函数的参数)删去并返回一个参数(构造函数...实例化一个对象返回 这里,如果Object.create()接受的参数是null,即var obj = Object.create(null),则obj是真正意义上的对象,不具有hasOwnProperty...super是关键字,代表父类构造函数,只有子类的构造函数调用super()函数,才能让父类构造出this给子类去丰富。

42620

《你不知道的JavaScript(上)之原型对象》读书笔记

new的工作原理:1.创建一个对象,构造函数的this会指向这个对象2.这个新对象会被链接到原型3.执行构造函数方法,其属性和方法都会被添加到this引用的对象4.如果构造函数没有返回对象,那么返回...的显式定义,二者都会在对象创建一个不包含值的属性,对于这个属性的访问自动调用一个隐藏函数,它的返回值会被当作属性访问的返回值。...、some(..)for..of,循环每次调用 myObject 迭代器对象的 next() 方法时,内部的指针都会向前移动并 返回对象属性列表的下一个值。...调用 Object.create(..) 凭空创建一个“新”对象并把新对象内部的 [[Prototype]] 关联到你指定的对象(本例是 Foo.prototype)。...Object.create(null) 创 建 一 个 拥 有 ( 或 者 说 null)[[Prototype]] 链接的对象,这个对象无法进行委托。

62330

JavaScript的这些骚操作,你都知道吗?

写这篇文章的缘由是上周公司前端团队的code review时,看了一个实习小哥哥的代码后,感觉一些刚入行不久的同学,对于真实项目中的一些js处理不是很熟练,缺乏一些技巧。...Object.create(null) ? ❝Vue和Vuex的源码,作者都使用了Object.create(null)来初始化一个对象为什么不用更简洁的{}呢?...我们来看下Object.create()的定义: ❞ Object.create(proto,[propertiesObject]) proto:新创建对象的原型对象 propertiesObject:...也就是我们可以通过Object.create(null)这种方式创建一个纯净的对象,我们可以自己定义hasOwnProperty、toString等方法,完全不必担心会将原型链上的同名方法覆盖掉。...日常开发,数组的拷贝是一个会经常遇到的场景。其实实现数组的拷贝有很多骚技巧。

50930

【JS 口袋书】第 5 章:JS 对象生命周期的秘密

拉下来详细介绍。暂且先记住,“this”是对函数执行的某个对象的引用。咱们的例子,greet() Tom的上下文中运行,因此可以访问“this.name”。...”,new 干了三件事情 创建一个对象对象的__proto__指向构造函数的prototype 使用对象作为上下文的调用构造函数function Person(name, age) {...__proto__ = Person().prototype 使用对象作为上下文调用构造函数: Person.call(obj) 检查原型链 检查JS对象之间的原型链接有很多种方法。...例如,Object.getPrototypeOf是一个返回任何给定对象原型的方法。...新的JS版本是向后兼容的,这意味着现有功能的基础上添加了新功能,这些新功能的大多数都是遗留代码的语法糖。 总结 JS的几乎所有东西都是一个对象。 从字面上看。

1.6K10

深入JavaScript原型链污染

__func__)) # 输出:True 为什么id得到的结果不相等?foo1.myName(通过实例去访问方法时),Python 实际上会创建一个绑定方法(bound method)对象。...Object.create(null) 是一个常见用法,创建一个拥有空(或者说null)[[Prototype]]链接的对象,适合保存数据。...= Object.create(anotherObject); myObject.a; // 2 为什么能找到?...新对象可以访问构造函数原型上的属性和方法。 构造函数执行:构造函数(你 new 后面调用的函数)被执行。构造函数内部的 this 关键字会被指向新创建的对象。...如果构造函数返回对象,则返回对象,否则返回刚刚新创建的对象返回对象:如果构造函数没有显式返回一个对象,那么 new 表达式将返回新创建的对象

17310

深入浅出JavaScript之原型链&继承

) this.age = age; //使用new调用Peoson的话,this会指向原型为Person.prototype的对象,通过this.name给对象赋值,最后this作为return...= Object.create(Person.prototype); //Object.create():创建一个对象,并且这个对象的原型指向它的参数 //这样子我们可以访问Student.prototype...是对象,并且这个对象的原型指向Person.prototype,接着我们Person.prototype上也设置了LEGS_NUM,ARMS_NUM属性以及hi,walk方法。...比如我们调用hi方法的时候,我们首先看这个对象yun上有没有hi方法,但是在这个实例没有所以向上查找,查找到yun的原型也就是Student.protoype上有这hi方法,所以最终调用的是Student.prototype.hi...Student.prototype = Object.create(Person.prototype); //相对来说这中方式是比较理想的,这里我们创建了一个对象 //,并且对象的原型指向Person.prototype

66380

面试官问:能否模拟实现JS的new操作符(高频考点)

2.4 由此得出 小结4: 如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象。...结合这些小结,整理在一起就是: 创建了一个全新的对象。 这个对象会被执行[[Prototype]](也就是__proto__)链接。 生成的新对象绑定到函数调用的this。...如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象。...`Object`(包含`Functoin`, `Array`, `Date`, `RegExg`, `Error`),那么`new`表达式的函数调用自动返回这个新的对象。...如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象

44520

面试官问:能否模拟实现JS的new操作符

由此得出 小结4: 如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象。...结合这些小结,整理在一起就是: 1.创建了一个全新的对象。 2.这个对象会被执行[[Prototype]](也就是proto)链接。 3.生成的新对象绑定到函数调用的this。...5.如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象。...`Object`(包含`Functoin`, `Array`, `Date`, `RegExg`, `Error`),那么`new`表达式的函数调用自动返回这个新的对象。...5.如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式的函数调用自动返回这个新的对象

37720

模拟实现 new 操作符(js)

所以, js ,new 操作符,其实可以通俗的理解成一个辅助工具,用来辅助函数构造出一个对象。所以,我们才能够来模拟实现它,因为它其实通俗理解,就是一个工具函数。...A.prototype 的对象对象作为函数 A 的上下文,并调用 A 返回这个对象 这是基本的 new 使用的场景,那么我们要来模拟实现的话,这几件事就得自己处理: function _new...创建一个继承构造函数.prototype的对象 var obj = Object.create(Fn.prototype); // 2....让对象作为函数 A 的上下文,并调用 A Fn.call(obj, ...args); // 3. 返回这个对象 return obj; } 这样就结束了吗?...创建一个继承构造函数.prototype的对象 var obj = Object.create(Fn.prototype); // 2.

3.5K10

this 之谜揭底:从浅入深理解 JavaScript 的 this 关键字(二)

为什么? • 因为在上述代码,函数调用时应用了this 的默认绑定,因此 this 指向全局对象。...• 注意:对象属性引用链只有最顶层或最后一层影响调用位置。...• 使用 new 来调用函数,自动执行以下操作: 1. 创建一个对象 2. 让新对象的 __proto__(隐式原型) 等于函数的 prototype(显式原型) 3....判断返回值,如果返回值不是一个对象,则返回刚新建的新对象。 优先级 • 如果在某个调用位置应用多条规则该如何?那为了解决此问题,那就引申出了优先级问题。...• 更安全的this • DMZ(demilitarized zone)委托对象 JavaScript 创建一个对象最简单的方法都是 Object.create(null)。

5810

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

简单地说,它会接受两个参数,第一个参数作为调用返回对象的 __proto__,第二个参数负责配置该对象的相关属性。而这里的第一个参数,可以是对象也可以是 null。...这两步检查构造函数的原型对象的类型,如果是一个对象,则会将其作为实例的 __proto__;如果不是对象,则会将 Object.prototype 作为实例的 __proto__。...这就能解释为什么用 null 重写构造函数的原型后,实例的 __proto__ 没有跟着改变了,因为调用构造函数的过程,它链接上了 Object.prototype,可以说,这里实例的原型链并没有断开...实现一个更严谨的 new 大部分的手写 new 实现,通常都没有去检查构造函数的原型是否是一个对象。...所以,如果想实现一个更加严谨的 new,那么就不应该在内部去调用 Object.create 方法,而应该选择手动创建一个对象并和构造函数建立原型关系,同时,我们还应该加入对构造函数原型的类型判断,看它到底是不是一个对象

49210
领券