我有一个班级
function Man(){...}
Man.drinkBeer = function(){...}
我需要从SuperMan
继承Man
。我仍然希望我的Superman
可以喝点啤酒。
我该怎么做?
答案 0 :(得分:6)
Object.setPrototypeOf(SuperMan, Man);
这会将派生函数的内部__proto__
属性设置为基函数
因此,派生函数将继承基函数的所有属性。
请注意,这会影响函数本身,而不会影响prototype
s。
是的,这令人困惑。
现有浏览器不支持setPrototypeOf()
;相反,您可以使用非标准(但有效)替代方案:
SuperMan.__proto__ = Man;
答案 1 :(得分:2)
这是CoffeeScript
对class inheritance的作用:
var __hasProp = {}.hasOwnProperty,
__extends = function (child, parent) {
for (var key in parent) {
if (__hasProp.call(parent, key)) child[key] = parent[key];
}
function ctor() {
this.constructor = child;
}
ctor.prototype = parent.prototype;
child.prototype = new ctor();
child.__super__ = parent.prototype;
return child;
};
他们这样使用它:
var Man = (function(){
function Man() { ... }
...
return Man;
})();
....
var SuperMan = (function(_super){
__extends(SuperMan, _super);
function SuperMan() { ... }
...
return SuperMan;
})(Man);
....