使用prototype属性的javascript继承

珍露卡·斯卡里(Jeanluca Scaleri)

我正在尝试使用javascript进行继承。首先,在网络上我发现了这个

function A() {}
function B(){}
B.prototype = new A() ;
B.prototype.constructor = B ;

这有效,但是当我使用B的prototype属性时,它不再起作用(http://jsfiddle.net/jeanluca/eQBUx/

function A() {}
A.prototype.bar = function(){ return 'A'; }

function B() {}
B.prototype.bar = function(){ return 'B'; }

我知道你可以做

function B(){ this.bar = function(){ ... } } ;

但是我认为这绝对比使用原型定义它慢。那么在第二种情况下我该如何继承呢?

n

阿迪特·姆·沙

这是您的代码:

function A() {}
A.prototype.bar = function(){ return 'A';}

function B() {}
B.prototype.bar = function(){ return 'B'; }
B.prototype = new A() ; // replaces B's "bar" with A's "bar

var b = new B ;
console.log(b.bar());

如您所见,问题出在第六行。你第一次设定B.prototype.bar的功能在第5行,然后你立刻设置B.prototypenew A第6行(有效地撤销你在5号线做了什么)。解决方案是将第6行放在第5行之前:

function A() {}
A.prototype.bar = function(){ return 'A';}

function B() {}
B.prototype = new A() ; // now it will work
B.prototype.bar = function(){ return 'B'; }

var b = new B ;
console.log(b.bar());

亲自观看演示:http : //jsfiddle.net/eQBUx/1/

另外,我也同意Bergi的建议:停止使用new关键字


更新:阅读您的评论并更详细地了解了您的问题之后,我建议您使用我的augment库进行继承:

var A = Object.augment(function () {
    this.constructor = function () {};

    this.bar = function () {
        return "A";
    };
});

var B = A.augment(function (base) {
    this.constructor = function () {};

    this.bar = function () {
        return "B" + base.bar.call(this);
    };
});

var b = new B;

console.log(b.bar());

观看演示:http : //jsfiddle.net/eQBUx/2/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript:对象继承自Function.prototype

来自分类Dev

如何使用JavaScript继承父元素的CSS属性?

来自分类Dev

Javascript不继承原型属性

来自分类Dev

在Javascript中继承静态属性

来自分类Dev

Object.create(Function.prototype)=>创建继承属性的函数

来自分类Dev

Object.create(Function.prototype)=>创建继承属性的函数

来自分类Dev

使用Apply的JavaScript继承

来自分类Dev

使用 .call() 的 JavaScript 继承

来自分类Dev

具有原型的JavaScript继承-'constructor'属性?

来自分类Dev

javascript属性值函数未继承

来自分类Dev

JavaScript继承的属性默认值

来自分类Dev

JavaScript中的原型和属性继承

来自分类Dev

JavaScript继承的属性默认值

来自分类Dev

具有原型的JavaScript继承-'constructor'属性?

来自分类Dev

Javascript从类继承属性和方法?

来自分类Dev

Javascript继承静态和实例方法/属性

来自分类Dev

JavaScript将对象继承为属性

来自分类Dev

Javascript原型属性:基于原型的继承

来自分类Dev

javascript Constructor.prototype继承了另一个Constructor.prototype

来自分类Dev

搜索继承者使用的继承类的方法/属性

来自分类Dev

搜索继承者使用的继承类的方法/属性

来自分类Dev

使用JavaScript的原型继承链

来自分类Dev

使用JavaScript的原型继承链

来自分类Dev

在继承的类方法中使用静态属性

来自分类Dev

使用继承的类更改属性类型

来自分类Dev

如何使用继承的类型覆盖接口属性

来自分类Dev

使用Java继承在子类内部获取属性?

来自分类Dev

如何使用 TextFormatFlags 作为继承控件的属性?

来自分类Dev

如果没有“继承”属性,则无法使用“ CodeFile”属性

Related 相关文章

热门标签

归档