2015-06-11 15 views
0

我无法获取这段代码,以了解为什么ClassA方法会分配给ClassB。具体来说,我无法理解ClassB中前两行代码的继承行为。对象伪装在Javascript中如何工作

function ClassA(sColor) { 
    this.color = sColor; 
    this.sayColor = function() { 
    alert(this.color); 
    }; 
    this.sayColor1 = function() { 
    alert("hi"); 
    }; 
} 

function ClassB(sColor, sName) { 
    this.newMethod = ClassA; 
    this.newMethod(sColor); 
    delete this.newMethod; 
    this.name = sName; 
    this.sayName = function() { 
    alert(this.name); 
    }; 
} 

var objA = new ClassA('red'); 
var objB = new ClassB('blue', 'Nicholas'); 
objA.sayColor(); 
objB.sayColor(); 
objB.sayColor1(); 
objB.sayName(); 
+2

你应该在JS –

+0

了解_prototype_也关于_this_关键字 – Grundy

+0

有关在JavaScript中使用OOP的良好介绍,请参阅[使用对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)。 – Oka

回答

2

您正在分配ClassA作为ClassB中的实例方法,那不是继承。如果你想ClassB延长ClassA,您可以通过以下方式做到这一点:

-1

的问题是要在JS实现继承的方式

对象伪装是在JS这样做的话:

function ClassA() { 

} 
function ClassB() { 

    this.superclass = ClassA; 

    this.superclass(); 

    delete this.superclass; 
} 
ClassB.prototype = new ClassA; 

尝试实施这种方式...

欲了解更多参考,您可以检查:

http://www.sitepoint.com/javascript-objects/

1

我试了一下解释前两行会发生什么ClassB

在第一行,物业newMethod是指功能ClassA

this.newMethod = ClassA; 

然后,在第二行中,函数被调用,

this.newMethod(sColor); 

在这种情况下,ClassA中的函数引用ClassB中的对象,因此ClassA的所有属性都添加到创建的对象中。

,并在最后引用被简单地写ClassA.call(this,sColor);删除

delete this.newMethod; 

你可以做到这一点,而不是这三条线

相关问题