原型与原型链

原型与原型链

1.原型的概念

JavaScript的每个对象都继承另一个对象,后者称为“原型(prototype)”对象。
原型对象上的所有属性和方法,都会被派生对象共享。

每个对象都会在其内部初始化一个属性,就是prototype(原型)。
通俗来说,原型就是一个模板,更准确的说是一个对象模板。

实例示范1

function Student (name) {
    this. name = name;
}
Student . prototype.read = function()alert ("读书") ;var xiaoming = new Student ('小明') ;
var xiaohong = new Student('小红') ;
console.log(xiaoming.name);   //小明
console.log(xiaohong .name); //小红
xiaoming.read(); //读书

xiaohong.read(); //读书

原型对象的方法不是实例对象自身的方法。只要修改原型对象,变动就立刻会体现在所有实例对象上。

实例示范2

Student .prototype.read = function()alert ("read") ;
}

xiaoming.read(); //read

xiaohong.read(); //read

如果实例对象自身就有某个属性或方法,它就不会再去原型对象寻找这个属性或方法。

实例示范3

xiaoming.read = function() {

alert ("阅读") ;
}

xiaoming.read(); //阅读

xiaohong.read(); //read

原型对象的作用,就是定义所有实例对象共享的属性和方法。这也是它被称为原型对象的含义,而实例对象可以视作从原型对象衍生出来的子对象。

2.原型链是什么?

当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念。简单来说就是利用原型让一个引用类型继承另一个引用类型的属性和方法。

对象的属性和方法,有可能是定义在自身,也有可能是定义在它的原型对象。由于原型本身也是对象,又有自己的原型,所以形成了一条原型链(prototype chain)。 比如,a对象是b对象的原型,b对象是c对象的原型,以此类推。

3.“原型链”的作用是什么?

“原型链”的作用是,读取对象的某个属性时,JavaScript 引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。如果直到最项层的Object.prototype还是找不到,则返回undefined。

如果对象自身和它的原型,都定义了一个同名属性,那么优先读取对象自身的属性,这叫做“覆盖(overriding)”。

需要注意的是,一级级向上, 在原型链寻找某个属性,对性能是有影响的。所寻找的属性在越上层的原型对象,对性能的影响越大。如果寻找某个不存在的属性,将会遍历整个原型链。

4.null和undefined的区别

undefined是一个表示"无"的原始值。

null用来表示尚未存在的对象,它没有自己的原型对象。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风轻云淡旳流年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值