从这里:
function highest(){
return makeArray(arguments).sort(function(a,b){
return b - a;
});
}
function makeArray(array){
return Array().slice.call( array );
}
assert(highest(1, 1, 2, 3)[0] == 3, "Get the highest value.");
assert(highest(3, 1, 2, 3, 4, 5)[1] == 4, "Verify the results.");
Run Code Online (Sandbox Code Playgroud)
现在,为什么Array()甚至在没有new操作员的情况下返回有意义的东西 我在JS中看到的大多数"类"定义undefined如果没有调用则返回new:
function User(name) {
this.name = name;
this.jump = function() {
console.log(name + " is jumping!");
}
}
assert(typeof(User("no New")) == 'undefined');
Run Code Online (Sandbox Code Playgroud)
该规范明确规定如下:
当
Array作为函数而不是构造函数调用时,它会创建并初始化一个新Array对象.因此,函数调用Array(…)等效于new Array(…)具有相同参数的对象创建表达式.
内部如何完成取决于实现,但对于自定义构造函数,您可以使用以下技巧:
if(!(this instanceof User)) return new User(name);
Run Code Online (Sandbox Code Playgroud)
...因为new User(...)设置this为创建的User实例,而User(...)将其设置为全局对象.(所以你实际上是在最后一个片段中设置全局变量.)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |