我正在阅读Javascript这本书的好部分并且有一个例子
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 [name] = func;和this.prototype.name = func;是相同的,但似乎他们不是。
当我在Chrome中运行已注释的语句时,显示错误
“未捕获的TypeError:undefined不是函数”
声明有什么问题?是不是将func分配给了名字?
由于
答案 0 :(得分:5)
表达式
this.prototype.name = func;
为原型对象的“name”属性赋值。相比之下,这个
this.prototype[name] = func;
为属性赋值,该属性的名称由变量“name”的字符串值确定。不同之处在于,使用简单的.
引用,标识符本身将被视为属性名称。使用[]
,括号内的表达式将被计算,而 将被视为属性名称。
请注意,您的“整数”方法明确地利用了这一行为只需几行!