原型的新功能

时间:2015-01-23 20:39:02

标签: javascript function

在javascript中,我们有以下创建对象的方法:

// Prototype Object
var prototype = {
  jump: function() {}
}

// Create person
var person = Object.create(prototype)

我的问题是:有没有办法创建新功能?换句话说:

// Prototype Object
var prototype = {
  jump: function() {}
}

// Create person and somehow define invokation
var person = ?? // e.g.'Function.create(prototype, function() {})'

显然Function.create不起作用。我想知道是否存在一种本地方式,而不是创建一个新函数并为其分配一长串方法。功能毕竟是对象,不是吗?如果这在Javascript中没有意义,为什么不呢?

**更新** 为清楚起见,让我添加以下内容。创建人的结果应该是一个可调用的人函数对象,但也具有原型函数,例如: person()和person.jump();

3 个答案:

答案 0 :(得分:1)

f.call.bind(f, null)

应该做你想做的事。

答案 1 :(得分:1)

更新前答案

在你的问题中并不是很清楚,但我假设你要做的是创建一个具有一组功能的对象(由原型定义),同时提供一个或多个的实现。这些功能。

我不知道有什么方法可以在一行中完成这项任务,但很容易分两行:

// Prototype Object
var prototype = {
  jump: function() { console.log('jump'); }
}

var person = Object.create(prototype);            // Create person
person.jump = function() { console.log('fly'); }; // then define invocation

person.jump(); // outputs 'fly'

如果你有兴趣重新定义可以访问“私人”成员的“封闭类”的方法,我很确定没有办法做到这一点(如果有的话,那些成员不会真的是私有的)

答案 2 :(得分:1)

更新后答案

Javascript没有预先存在的内置方法我知道这是做什么的(我怀疑有人会想要它)但是编写自己的方法相当容易:

function FunctionObjectCreate(prototype, mainFunc) {
    Object.keys(prototype).forEach(function(key) {
        mainFunc[key] = prototype[key];
    });
    return mainFunc;
}

var prototype = {
    jump: function() { console.log('jump'); }
};

var person = FunctionObjectCreate(prototype,
                                  function() { console.log('person'); });

person();      // prints 'person'
person.jump(); // prints 'jump'