“new Array(n)”和“Array(n)”有什么区别
What the different between `new Array(n)` and `Array(n)`
如果它们都调用构造函数"数组"并生成一个对象,那有什么不同?
我知道如果我们在没有new
的情况下创建一些对象,我们会失去this
:
function Animal(name) {this.name = name}
var duck = Animal('duck'); // undefined
但这如何适用于new Array(n)
和Array(n)
?
没有区别。查看这篇文章:
你永远不需要在 JavaScript 中使用新的 Object()。使用对象而是文字 {}。同样,不要使用新的 Array(),使用 array而是文字 []。JavaScript 中的数组的工作方式与数组完全不同在 Java 中,使用类似 Java 的语法会让你感到困惑。
不要使用新数字、新字符串或新布尔值。这些形式产生不必要的对象包装器。只需改用简单的文字即可。
............。
所以规则很简单:我们唯一应该使用 new 运算符的时候是以调用伪经典构造函数。调用构造函数,使用new是强制性的。
Array
的这种行为在规范中描述。您可以像这样获得相同的行为
function Animal(name) {
if(!(this instanceof Animal)) {
return new Animal(name);
}
this.name = name
}
var duck = Animal('duck'); //Animal {name: "duck"}
但更好的主意是遵循一个简单的代码样式约定,即所有以大写字母开头的函数都是构造函数,应该用 new
调用。并设置一个你喜欢检查代码的 linter 遵循此规则。
JavaScript 使用原型继承。当您使用new
命令时,它会继承自Object
。如果你想从用户定义的对象(例如动物)继承,你需要使用new Animal()
或不使用new
你可以通过以下方式完成。
// 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’
相关文章:
- 在什么情况下,Array.observe的“add”事件会触发
- Array.remove=function(){..}是什么意思
- Array.prototype.reduce的实际用途是什么
- 在JavaScript中调用array()作为构造函数时,返回的是什么类型的数组
- Array.any的等价物是什么?在JavaScript中
- 常规推送和 Array.prototype.push.apply 有什么区别?
- “new Array(n)”和“Array(n)”有什么区别
- “array.length -1”在JavaScript中是什么意思
- Array.prototype.some() 是否返回文字?如果是这样,这段代码是什么意思
- Javascript中的Array.prototype.reverse和Array.reverse有什么区别
- 在javascript koans的摘录中,Array(foo+1)是关于什么的
- 在JavaScript中,什么's myArray.length=0与myArray=new Array()之间
- 什么's是Array.of(n)、Array(n)和Array=[n]之间的差值
- getByteFrequencyData()返回的Array的值是什么意思
- 什么's(数组中的x)和(i=0;i<array.length;i++)之间的差值
- Array.prototype.find,什么'它的规格是什么
- 在 Array.prototype 中传递“for each”循环的参数的语法是什么?
- Array.prototype.join.call 在后台对字符串做什么
- 什么可以阻止Array.prototype.filter()在控制台中运行良好的防油精脚本中运行
- 这个语句中的+做什么:a=+array[i]