使用JavaScript函数对象的继承
是否可以使两个或多个JavaScript函数对象从一个公共对象继承属性使用JavaScript函数对象的继承,javascript,inheritance,prototype,prototypal-inheritance,Javascript,Inheritance,Prototype,Prototypal Inheritance,是否可以使两个或多个JavaScript函数对象从一个公共对象继承属性 var obj common = { a: 'first', b: 'second', z: 'last' }; var foo = function() {}; var bar = function() {}; // Some magic occurs here foo.a; // 'first' bar.z; // 'last' 实现这一点的一种方法是使用mixin,在这里我们迭代comm
var obj common = {
a: 'first',
b: 'second',
z: 'last'
};
var foo = function() {};
var bar = function() {};
// Some magic occurs here
foo.a; // 'first'
bar.z; // 'last'
实现这一点的一种方法是使用mixin,在这里我们迭代common并将属性复制到foo和bar。然而,如果我们有一个庞大的财产清单,这可能会变得效率低下
有没有比JavaScript更好的方法来实现这一点?我很想在这里使用原型链,但我不知道这是否可行。不可能以以下方式创建函数:
(函数声明)函数foo(){}
构造函数函数
(函数表达式)var foo=function(){}
(ES6箭头)()=>{}
function f(){
return Function.apply(this, arguments);
}
f.prototype = Object.create(Function.prototype);
f.x = 15;
但是它不是,而且它也不是根据规范(也就是说,因为作为函数调用的函数构造函数的行为是相同的-即它忽略传入的
这个。这将完全满足您的需求,但我认为您不需要您认为需要的。如果你知道我的意思
这需要现代铬合金或FF:
var common = {
__proto__: Function.prototype,
a: 'first',
b: 'second',
z: 'last'
};
var foo = function() {};
var bar = function() {};
Object.setPrototypeOf(foo, common);
Object.setPrototypeOf(bar, common);
console.log(foo.a); // 'first'
console.log(bar.z); // 'last'
我想你想要的是:
var common = {
a: 'first',
b: 'second',
z: 'last'
};
var Foo = function() {};
var Bar = function() {};
Foo.prototype = Bar.prototype = common;
var foo = new Foo();
var bar= new Bar();
console.log(foo.a); // 'first'
console.log(bar.z); // 'last'
不,我特别想创建从公共父原型继承的对象,但也可以作为函数应用于参数。非常感谢。如果我没有弄错的话,直接设置proto通常不是一个好主意。这可以通过额外调用Object.setPrototypeOf(common,Function.prototype)来实现吗?另外,看起来Safari中不支持setPrototypeOf。我的回答中的前一种方法与语言的粒度不符,因此它使用了广泛支持的结构/方法。后一种方法更为传统,利用原型链;但他们实现了不同的目标。第二种方法是为函数对象的实例设置原型链,而我想设置函数对象本身的原型链。似乎Javascript编写人员并不打算让程序员这样做。