自定义继承

本文探讨了自定义继承的三种方法:通过API设置两个对象的继承关系,批量设置子对象继承,以及处理多种类型间的继承。在处理类型继承时,强调了定义父类型的重要性,包括构造函数和原型对象的定义,并介绍了如何正确地调用父类型的构造函数以避免this指向错误。通过call方法可以解决这个问题,确保父类型构造函数能正确地初始化子类型的共享属性结构。
摘要由CSDN通过智能技术生成

自定义继承:
1.仅设置两个对象间的继承关系:

Child.__proto__=father

问题:__proto__也是内部属性,有可能被浏览器禁用
解决:API

//设置child继承father
Object.setPrototypeOf(child,father);
var hmm={
	name:"Han Meimei",
	age:19,
	getName(){
		console.log(this.name);
	}
}
hmm.getName();
var father={
	bal:2000,
	car:'infiniti'
};
Object.setPrototypeOf(hmm,father);
console.dir(hmm);

2.批量设置多个子对象的继承关系
只要修改构造函数的Prototype对象即可

构造函数.prototype=father
var father={
	bal:2000,
	car:'infiniti'
};
function Student(name,age){
	this.name=name;
	this.age=age;
}
Student.prototype=father;
Student.prototype.getName=function(){
	console.log(this.name);
}
var lilei=new Student("Li Lei",18);
var hmm=new Student("Han Meimei",18);

时机:定义完构造函数之后,立即修改原型对象!
在这里插入图片描述
3.两种类型间的继承:
何时使用:如果发现多个类型之间拥有相同的属性结构和方法时,就要抽象出一个父类型
如何使用:
1.定义父类型:
父类型的构造结构,集中定义相同的属性结构
父类型的原型对象,集中定义相同的方法
2.让子类型原型对象继承父类型原型对象
结果:保证子对象可调用抽象父类型原型对象中的方法
3.在子类型构造函数中借用父类型构造函数
结果:请父类型构造函数帮助和构造共有的属性结构
问题:直接调用父类型构造函数,其中的this默认指window。
解决:call->只要this不是想要的!就可用call随便替换
父类型构造.call(this,参数)
继承中先有子类型,只有子类型中有公共的属性和方法才抽象父类型

function Fly(name,speed){
	this.name=name;
	this.speed=speed;
}
Fly.prototype.fly=function(){
	console.log(`${this.name}的飞行速度${this.speed}`);
}
function Plane(name,speed,score){
	Fly.call(this,name,speed);
	this.score=score;
}
Plane.prototype.getScore=function(){
	console.log(`${this.name}${this.score}分`);
}
Object.setPrototypeOf(Plane.prototype,Fly.prototype);
var f16=new Plane("f16",1000,20);
console.dir(f16);
f16.

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值