2014-05-01 55 views
-1

我读的书JavaScript中的很大一部分,有一个例子prototype [name]和prototype.name有什么区别?

Function.prototype.method = function(name, func){ 
    this.prototype[name] = func; 
    // this.prototype.name = func; 
    return this; 
}; 

Number.method("integer", function(){ 
    return Math[this<0 ? "ceiling" : "floor"](this); 
}); 

document.writeln((10/3).integer()); 

我想this.prototype [名] = FUNC;和this.prototype.name = func;是同样的事情,但似乎他们不是。

当我在Chrome浏览器中注释掉的语句,它显示一个错误

“遗漏的类型错误:未定义是不是一个函数”

那么,什么是错误的说法?它不是将func分配给名称吗?

由于

+1

准相关:'ceil'不是'天花板'。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ceil –

+0

嗨,我在Chrome上进行了测试,天花板和Ceil都在工作,但是仍然感谢 – user1888955

回答

5

表达

this.prototype.name = func; 

一个值分配给原型对象的 “name” 属性。相比之下,这

this.prototype[name] = func; 
this.prototype[name] = func; 

将值分配给名称由变量“name”的字符串值确定的属性。区别在于,通过简单的.引用,标识符本身将被视为属性名称。用[],括号内的表达式被评估,被认为是属性名称。

请注意,您的“整数”方法明确地利用了这种行为只是几行!

+0

感谢Pointy,那很棒! – user1888955

相关问题