带有原型的新功能
new Function with Prototype
在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 函数对象,它是可调用的,但也有原型函数,例如person() 和 person.jump();
f.call.bind(f, null)
应该做你想做的。
更新前答案
你的问题不是很清楚,但我假设你想做的是创建一个具有一组特定功能(由原型定义)的对象,同时为一个或更多这些功能。
我不知道有什么方法可以在一行中做到这一点,但在两行中很容易做到:
// 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'
如果您有兴趣在 "closure classes" 上重新定义可以访问 "private" 成员的方法,我很确定没有办法做到这一点(如果有的话,那些成员不会'真的不是私人的)。
Post-更新答案
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'
在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 函数对象,它是可调用的,但也有原型函数,例如person() 和 person.jump();
f.call.bind(f, null)
应该做你想做的。
更新前答案
你的问题不是很清楚,但我假设你想做的是创建一个具有一组特定功能(由原型定义)的对象,同时为一个或更多这些功能。
我不知道有什么方法可以在一行中做到这一点,但在两行中很容易做到:
// 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'
如果您有兴趣在 "closure classes" 上重新定义可以访问 "private" 成员的方法,我很确定没有办法做到这一点(如果有的话,那些成员不会'真的不是私人的)。
Post-更新答案
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'