使用 JavaScript 函数对象继承
Employing inheritance with JavaScript Function objects
是否可以创建两个或多个 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,我们在其中迭代 common 并将属性复制到 foo 和 bar。但是,如果我们有一个巨大的属性列表,这可能会变得低效。
有没有更JavaScript的方法呢?我很想在这里使用原型链,但我不知道是否可行。
无法通过以下方式创建函数:
function foo (){ }
(函数声明)
Function
构造函数
var foo = function(){ }
(函数表达式)
() => {}
(ES6 箭头)。
在所有这些中,您不能为函数本身指定基数 class。但是,正如您所指出的,类似 mixin 的技巧在这里就可以正常工作。
请注意,事先可能认为以下方法可能有效:
function f(){
return Function.apply(this, arguments);
}
f.prototype = Object.create(Function.prototype);
f.x = 15;
但它没有,而且根据规范也没有(即,因为作为函数调用的函数构造函数的行为相同 - 即它忽略传入的 this
)。
这将完全按照您的要求进行,但我不认为您想要您认为您想要的。如果你明白我的意思?!
这需要现代 Chrome 或 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'
是否可以创建两个或多个 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,我们在其中迭代 common 并将属性复制到 foo 和 bar。但是,如果我们有一个巨大的属性列表,这可能会变得低效。
有没有更JavaScript的方法呢?我很想在这里使用原型链,但我不知道是否可行。
无法通过以下方式创建函数:
function foo (){ }
(函数声明)Function
构造函数var foo = function(){ }
(函数表达式)() => {}
(ES6 箭头)。
在所有这些中,您不能为函数本身指定基数 class。但是,正如您所指出的,类似 mixin 的技巧在这里就可以正常工作。
请注意,事先可能认为以下方法可能有效:
function f(){
return Function.apply(this, arguments);
}
f.prototype = Object.create(Function.prototype);
f.x = 15;
但它没有,而且根据规范也没有(即,因为作为函数调用的函数构造函数的行为相同 - 即它忽略传入的 this
)。
这将完全按照您的要求进行,但我不认为您想要您认为您想要的。如果你明白我的意思?!
这需要现代 Chrome 或 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'