添加方法到功能

时间:2014-11-24 05:47:45

标签: javascript

我是JavaScript的新手,我正在学习 JavaScript:The Good Parts 这本书。在该书中,以下配方用于增加所有功能的方法:

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

我想探索这个概念,所以我提出了以下脚本,旨在将greet()方法添加到func()函数中:

//define how the augmentation will work
Function.prototype.method = function (name, func) {
    this.prototype[name] = func;
    return this;
}

//create a dummy function to augment
function func() {
    //do nothing
}

//create function to be added
func.method('greet', function() {
    console.log("Greetings from greet()!");
});

//access the new function
func.greet();

但是,当我运行它时,我收到错误Uncaught TypeError: undefined is not a function。有人可以告诉我我做错了什么。

1 个答案:

答案 0 :(得分:6)

在这种情况下,您要修改该行:

this.prototype[name] = func;

this[name] = func;

演示:http://jsfiddle.net/s8aed1bx/1/

或者你可以使用

this.constructor.prototype[name] = func;

但是这会将每个新方法添加到每个函数中,而不仅仅是您调用method的函数。或者您可以使用:

var f2 = new func();
f2.greet();

<强>为什么吗

在JavaScript中查找对象的属性时,会搜索对象本身,然后搜索对象prototype的{​​{1}}(依此类推)。 constructor的{​​{1}}为.constructor

在这种情况下,如果你写了:

,你所做的就会奏效
func

函数的原型用于由该函数创建的新实例。 (您创建的对象本身具有Function创建函数。)