在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();
答案 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'