OOJS多级继承

时间:2015-12-17 05:52:54

标签: javascript

在Javascript if中,C - > B - > A(A是B和C继承的父级继承B),是否可以限制C不继承属性A。

PFB代码相同,

function a(name) {
this.Name = name;
this.GetName = function () {
    alert(this.Name);
},
this.MethodOfA = function () {
    alert(this.Name + ' method of A --');
}
}

function b(name) {
a.call(this, name);
this.Name = name;
this.GetName = function () {
    alert(this.Name);
},
this.MethodOfB = function () {
    alert(this.Name + ' method of B --');
}
}

b.prototype = Object.create(a.prototype);

function c(name) {
b.call(this, name);
this.Name = name;
this.GetName = function () {
    alert(this.Name);
},
this.MethodOfC = function () {
    alert(this.Name + ' method of C --');
}
}

c.prototype.CallMe = function () {
    alert('call');
}

c.prototype = Object.create(b.prototype);

var aObj = new a('user1')
var bObj = new b('user2');
var cObj = new c('user3');

cObj.CallMe();
cObj.MethodOfC();
cObj.GetName();
cObj.MethodOfB();
cObj.MethodOfA();

在Javascript if中,C - > B - > A(A是B和C继承的父级继承B),是否可以限制C不继承属性A。

1 个答案:

答案 0 :(得分:2)

注意我使用" class"为方便起见,因为这些只是功能。在这种情况下,你可以做的一件事就是限制b类,这样如果初始化的当前对象属于类a,它只会继承b的方法:

function b(name) {
    if(this instanceof b) a.call(this, name);
    ...
}

当您从班级b.call拨打c时,this instanceof b将为false。这样,只允许类b的项目从a获取属性和方法。

修改:您也可以通过执行以下操作来阻止课程c

if( !(this instanceof c) ) a.call(this, name);

Here is an example我创建了一个新类d(也是b.call()),它继承自a,其中c没有。