prototype [name]和prototype.name有什么区别?

时间:2014-05-01 18:51:05

标签: javascript

我正在阅读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分配给了名字?

由于

1 个答案:

答案 0 :(得分:5)

表达式

this.prototype.name = func;

为原型对象的“name”属性赋值。相比之下,这个

this.prototype[name] = func;

为属性赋值,该属性的名称由变量“name”的字符串值确定。不同之处在于,使用简单的.引用,标识符本身将被视为属性名称。使用[],括号内的表达式将被计算,而 将被视为属性名称。

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