Javascript 如何继承静态方法?
我有一节课Javascript 如何继承静态方法?,javascript,oop,design-patterns,inheritance,Javascript,Oop,Design Patterns,Inheritance,我有一节课 function Man(){...} Man.drinkBeer = function(){...} 我需要从人类继承超人。我还想让我的超人喝点啤酒 我该怎么做 Object.setPrototypeOf(SuperMan, Man); 这将把派生函数的内部\uuuu proto\uuu属性设置为基函数。 因此,派生函数将继承基函数的所有属性 请注意,这会影响函数本身,而不是它们的原型 是的,令人困惑 现有浏览器不支持setPrototypeOf();相反,您可以使用非标准(
function Man(){...}
Man.drinkBeer = function(){...}
我需要从人类继承超人。我还想让我的超人喝点啤酒
我该怎么做
Object.setPrototypeOf(SuperMan, Man);
这将把派生函数的内部\uuuu proto\uuu
属性设置为基函数。因此,派生函数将继承基函数的所有属性 请注意,这会影响函数本身,而不是它们的
原型
是的,令人困惑
现有浏览器不支持setPrototypeOf()
;相反,您可以使用非标准(但有效)替代方案:
SuperMan.__proto__ = Man;
这就是我们的目的:
他们这样使用它:
var Man = (function(){
function Man() { ... }
...
return Man;
})();
....
var SuperMan = (function(_super){
__extends(SuperMan, _super);
function SuperMan() { ... }
...
return SuperMan;
})(Man);
....
这是一个ES6方法,不是吗?这种方法也会继承非静态方法吗?您只需将其称为Parent.method()
或Child.method()
-同一个函数显示为两个“class”函数的属性。@SLaks实际上,TC39最终决定反对setPrototypeOf
和\uu proto\ucode>(因为当前的浏览器,主要是因为它已经在Zepto中使用,Zepto广泛部署在运行在移动设备上的网站上,所以它是事实上的标准)所以,\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuus、 @Alnitak如果你不喜欢啤酒,那么你就不需要调用这个函数=),但它是静态的-我无法选择调用它的对象!
var Man = (function(){
function Man() { ... }
...
return Man;
})();
....
var SuperMan = (function(_super){
__extends(SuperMan, _super);
function SuperMan() { ... }
...
return SuperMan;
})(Man);
....