欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js继承例子

程序员文章站 2022-06-28 18:51:14
javascript原型与继承function Person(){};var boy = new Person();//错误当创建函数在改写原型前时,实例的this指针指向的是改写之前的原型,而不是改写后的原型因此在此处,boy.sayHi()的指针并没有指向改写后的原型正确做法是先改写原型,再创建实例Person.prototype={constructor:Person,name:'Nicolas',age:67,job:'software Engineer',sayH...

javascript原型与继承

function Person(){};
var boy = new Person();//错误

当创建函数在改写原型前时,实例的this指针指向的是改写之前的原型,而不是改写后的原型
因此在此处,boy.sayHi()的指针并没有指向改写后的原型
正确做法是先改写原型,再创建实例

Person.prototype={
	constructor:Person,
	name:'Nicolas',
	age:67,
	job:'software Engineer',
	sayHi:function(){
		document.write('hi,'+this.name+'<br>');
	}
}
var boy = new Person();//正确
boy.sayHi();

继承

深入理解,如果再构造一个函数firstWife(),使得她的原型是Person函数的实例,
她的原型的构造函数是她(继承),再创建一个firstWife实例grandson,然后对firstWife
的原型进行重写,包含name属性和sayHi方法。最后调用grandson.sayHi()如下面代码

function firstWife(){};
firstWife.prototype=new Person();//继承
firstWife.prototype.construct=firstWife;//继承
//var grandson=new firstWife();
firstWife.prototype={
	name:'jxg',
	age:22,
	job:'H5 Engineer',
	sayHi:function(){
		document.write('hi,'+this.name);
	}
}
var grandson=new firstWife();
grandson.sayHi();//hi,Nicolas

通过调试,此时grandson.sayHi()返回的是hi,Nicolas,而不是hi,jxg,可以看到
grandson一开始查找自己sayHi()方法,然后从构造函数原型找,此时因为实例创建在
重写firstWife构造函数前,所以firstWife原型this指针指向空,于是继续向上找到
Person的原型的sayHi()方法;因此返回hi,Nicolas

本文地址:https://blog.csdn.net/ji860729050/article/details/110141694

相关标签: js