Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何继承静态方法?_Javascript_Oop_Design Patterns_Inheritance - Fatal编程技术网

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);
....