“`new (N)”和“Array(N)”的区别是什么?

2025-05-07 20:27:06
社区首页 >问答首页 >“`new (N)”和“Array(N)”的区别是什么?问“`new (N)”和“Array(N)”的区别是什么?ENStack Overflow用户提问于 2016-02-08 06:53:39回...

社区首页 >问答首页 >“`new (N)”和“Array(N)”的区别是什么?问“`new (N)”和“Array(N)”的区别是什么?ENStack Overflow用户提问于 2016-02-08 06:53:39回答 3查看 103关注 0票数 1如果两者都调用构造函数"Array“并生成一个对象,这又有什么区别呢?

我知道如果我们创建一些没有this的对象,我们就失去了new

代码语言:javascript运行复制function Animal(name) {this.name = name}

var duck = Animal('duck'); // undefined但是这对于new Array(n)和Array(n)是如何运作的呢?

javascriptarrays关注问题分享EN回答 3推荐最新Stack Overflow用户回答已采纳发布于 2016-02-08 06:58:57

没有什么不同。检查这个文章

您不需要在JavaScript中使用新对象()。使用对象文本{}代替。类似地,不要使用new (),而是使用数组文本[]。JavaScript中的数组不像Java中的数组那样工作,使用类似Java的语法会让您感到困惑。

不要使用新数字、新字符串或新布尔值。这些表单产生不必要的对象包装器。只需使用简单的文字代替。

..

所以这个规则很简单:我们唯一应该使用新操作符的时候是调用一个伪经典的构造函数。当调用一个构造函数时,使用new是强制性的。

收藏分享票数 2ENStack Overflow用户发布于 2016-02-08 06:58:09

规范中描述了Array的这种行为。你可以做到这样的行为

代码语言:javascript运行复制function Animal(name) {

if(!(this instanceof Animal)) {

return new Animal(name);

}

this.name = name

}

var duck = Animal('duck'); //Animal {name: "duck"}但是,更好的方法是遵循一个简单的代码风格惯例,即所有以大写字母开头的函数都是构造函数,应该用new调用。并设置一个链接,您希望检查您的代码遵循以下规则。

收藏分享票数 1ENStack Overflow用户发布于 2016-02-08 07:18:49

JavaScript使用原型继承。使用new命令时,它继承自Object。如果您想从用户定义的对象(例如,动物)继承,您需要使用new Animal()或不使用new,您可以这样做。

代码语言:javascript运行复制 // Function object acts as a combination of a prototype

// to use for the new object and a constructor function to invoke:

function Animal(name){

this.name = name

}

var inheritFrom = function(parent, prop){

// This is how you create object as a prototype of another object

// var x = {} syntax can’t do this as it always set the newly

//created object’s prototype to Object.prototype.

var obj = Object.create(parent.prototype);

// apply() method calls a function with a given this value

//and arguments provided as an array

parent.apply(obj, [prop]);

return obj

}

var duck = inheritFrom(Animal, 'duck');

console.log(duck.name); // ‘duck’收藏分享票数 0EN页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持原文链接:https://stackoverflow.com/questions/35263876

复制相关文章