Javascript 为什么Array().slice不带;新";工作
: 现在,为什么Javascript 为什么Array().slice不带;新";工作,javascript,Javascript,: 现在,为什么Array()甚至返回有意义的内容,而没有新的操作符?我在JS中看到的大多数“类”定义如果在没有new的情况下调用,则返回undefined: function User(name) { this.name = name; this.jump = function() { console.log(name + " is jumping!"); } } assert(typeof(User("no New")) == 'undefined'); 《公约》明确
Array()
甚至返回有意义的内容,而没有新的操作符?我在JS中看到的大多数“类”定义如果在没有new
的情况下调用,则返回undefined
:
function User(name) {
this.name = name;
this.jump = function() {
console.log(name + " is jumping!");
}
}
assert(typeof(User("no New")) == 'undefined');
《公约》明确规定:
当Array
作为函数而不是构造函数调用时,它会创建并初始化一个新的Array
对象。因此,函数调用Array(…)
相当于对象创建表达式newarray(…)
,具有相同的参数
如何在内部完成取决于实现,但对于自定义构造函数,您可以使用以下技巧:
if(!(this instanceof User)) return new User(name);
。。。因为newuser(…)
将this
设置为创建的User
实例,而User(…)
将其设置为全局对象。(因此,您实际上在上一个代码片段中设置了全局变量。)基于Chrome的调试面板,Array()
以与newArray()
或[]
相同的方式返回新数组。我的猜测是,它要么是为了语言的易用性,要么是与[]
语法相关(当然不需要新的语法)
实际上,使用您自己的函数可以选择需要新的:
function User(name) {
if (!(this instanceof User)) {
return new User(name);
}
this.name = name;
this.jump = function() {
console.log(name + " is jumping!");
};
}
然后用户('blah')和新用户('blah')都起作用。与其说是“为什么.slice()起作用?”不如说是“为什么Array()
似乎做了与newarray()
相同的事情?”——答案可以总结为“因为规范这么说”。请参阅。@nnnnnn-赞成,表决通过以dup结束,谢谢。
function User(name) {
if (!(this instanceof User)) {
return new User(name);
}
this.name = name;
this.jump = function() {
console.log(name + " is jumping!");
};
}