JavaScript之原型,原型链,继承

  1. prototype,意为最初的,可用于规模应用的原型,默认值的意思。
    prototype本身是一个Object。原始的Object.prototype包括constructor和_proto_
    其中constructor指向自己本身,Object.prototype._proto_指向null(也是有Object.prototype._proto_指向null)。
    所有的函数都有prototype,其最终指向Object.prototype。

在这里插入图片描述
在这里插入图片描述
2. 原型链,在new出来的对象中,对象具有_proto_,能够引用new 的函数的prototype(constructor和_proto_)
,无论通过多少层函数new出来的对象,最终指向Objects,最终相当于在Objects函数上new出来的对象
proto(new出来的对象)——prototype(子函数)——prototype(父函数)——Object.prototype——Object.prototype.proto=null。


function Grand(){

};
Grand();
var obj2 = new Grand();

在这里插入图片描述
注意:Grand()中的prototype指向Object的prototype。
3. 继承,new出来的对象可以直接使用函数prototype的属性和方法(继承);

function Grand(){

};
Grand();
var obj2 = new Grand();
var obj3 = new Grand();
var pt = Grand.prototype;
pt.abc = '123';
console.log(obj2.abc);//123
console.log(obj3.abc);//123
obj2.abc = '456';
console.log(obj2.abc);//456

注意obj2.abc = ‘456’;对自己_proto_.abc 进行赋值,优先级高于继承的属性。
那么如何改变已有的属性?

function Grand(){

};
Grand();
var obj2 = new Grand();
var obj3 = new Grand();
var pt = Grand.prototype;
pt.abc = '123';
console.log(obj2.abc);
console.log(obj3.abc);
obj2.abc = '456';
delete obj2.abc;//删除
Grand.prototype.abc = '789';//修改
console.log(obj2.abc);
console.log(obj3.abc);

由于obj2._proto_指向Grand.prototype,不建议在obj2._proto_上进行修改。

练习:一层继承

function Grand(){

}

function Father(){

}
var obj = new Grand();
Father.prototype = obj;//由此深刻认识对象的本质!
Father.prototype.constructor = Father;//另constructor回指原函数

var obj2 = new Father();

在这里插入图片描述
由此深刻认识对象的本质!

练习:多重继承

function Grand(){
}
function Father(){
}
var obj = new Grand();
Father.prototype = obj;
Father.prototype.constructor = Father;//另constructor回指原函数

var obj2 = new Father();

function Son(){
}
var obj3 = new Father();
Son.prototype = obj3;
Son.prototype.constructor = Son;
var obj4 = new Son();

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值