在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。
答案 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
没有。