JavaScript继承机制的伪实现

        在ECMAScript语言规范中,是没有继承这些概念的。本文讨论的继承,是通过对象冒充机制来实现的。其实对象冒充也不是ECMAScript的术语,其是在开发者开始理解函数的工作方式,尤其是如何在函数环境中使用this关键字后才发展出来的。

        所谓对象冒充,其原理很简单:构造函数使用this关键字给所有的属性和方法赋值。因为构造函数只是一个函数,所以可以使classA的构造函数成为classB的方法,然后调用它。classB就会收到classA的构造函数中定义的属性和方法。

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

function ClassB(sColor)
{
        //newMethod指向ClassA
	this.newMethod=ClassA;
        //调用newMethod
	this.newMethod(sColor);
	/*delete this.newMethod;*/
}

  这个 原理就是吧classA作为常规函数来建立继承机制,而不是作为构造函数。

var objA=new ClassA("red");   
var objB=new ClassB("blue");
objA.sayColor();        //output   red
objB.sayColor();        //output   blue
alert(objB.color);      //output    blue
objA.sayColor();       //output     red

对于以上的代码,我的理解是ClassB调用newMethod后,获得了ClassA的属性和方法的一个副本,这一点从上面的输出结果可以得知。而如果不执行 

delete this.newMethod;

则ClassB的newMethod继续持有对ClassA的引用。但是执行下面的语句

objB.newMethod.sayColor();


是没有输出的。既然newMethod是指向ClassA的指针,理论上讲,应该可以访问sayColor的。求各位大牛共同研讨。





(本来内容来自《JavaScript高级程序设计》 Arthor Nicholas C.Zakas,尊重原创,此处拿出来,仅供学习讨论)




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript继承机制指的是通过原型链实现对象之间的继承关系。在JavaScript中,每个对象都有一个原型对象,通过原型链,对象可以访问原型对象中的属性和方法。因此,可以通过将一个对象的原型对象设置为另一个对象,从而实现对象之间的继承关系。 具体来说,当一个对象访问一个属性或方法时,如果该对象本身没有该属性或方法,则会沿着原型链向上查找,直到找到该属性或方法为止。如果最终都没有找到,则返回undefined。 例如,假设有一个父类对象Person,它有一个属性name和一个方法sayHello。现在有一个子类对象Student,我们希望它可以继承Person的属性和方法。我们可以通过以下代码实现: ```javascript // 定义父类Person function Person(name) { this.name = name; } Person.prototype = { sayHello: function() { console.log("Hello, my name is " + this.name); } }; // 定义子类Student function Student(name, grade) { this.grade = grade; } // 将Student的原型对象设置为Person的一个实例 Student.prototype = new Person(); // 创建一个Student对象,调用继承自Person的方法sayHello var student = new Student("Tom", 3); student.sayHello(); // 输出 "Hello, my name is Tom" ``` 在上面的代码中,我们将Student的原型对象设置为一个Person的实例,这样Student就可以访问Person中定义的属性和方法。当我们调用student.sayHello()时,由于student本身没有该方法,它会沿着原型链向上查找,找到Person中的sayHello方法并执行。这样,我们就实现JavaScript继承机制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值