JavaScript原型、原型链及继承

JavaScript原型、原型链及继承

prototype原型

1.原型定义

每一个构造函数都有一个prototype属性,这个属性会在生成实例的时候,成为实例对象的原型对象。javascript的每个对象都继承另一个对象,后者称为“原型”(prototype)对象。
一方面,任何一个对象,都可以充当其他对象的原型;另一方面,由于原型对象也是对象,所以它也有自己的原型。null也可以充当原型,区别在于它没有自己的原型对象。

2.原型作用

1、通过原型来添加方法,解决数据共享,节省内存空间
2、作用于继承,模拟面向对象,来做到继承,多态

如下图:
在这里插入图片描述
实例对象的_prototype_指向构造函数的prototype属性,从而可以实现继承,而此时prototype原型对象相当于特定

类型的所有实例对象可以访问的容器。

原型链

1.原型链定义

每个对象都有一个__proto__属性,指向它的prototype原型对象,而该prototype原型对象又有它自己的prototype原型对象,依次层层往上查询直到prototype的原型对象为null,则该条查询路径为原型链。
“原型链”的作用是,读取对象的某个属性时,JavaScript 引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。如果直到最顶层的Object.prototype还是找不到,则返回undefined。
举例来说,如果让某个函数的prototype属性指向一个数组,就意味着该函数可以当作数组的构造函数,因为它生成的实例对象都可以通过prototype属性调用数组方法

继承

构造函数继承
本质是在子类中,调用父类构造函数,从而让子类拥有父类的属性和方法
在这里插入图片描述
call/apply继承
在这里插入图片描述

var MyArray = function () {
};//MyArray.prototype = new Array;
var mine = new MyArray();
mine.push(1, 2, 3);
mine.length//

上面代码中,mine是构造函数MyArray的实例对象,由于MyArray的prototype属性指向一个数组实例,使得mine可以调用数组方法(这些方法定义在数组实例的prototype对象上面)。

原型链继承就是利用这个原理
将一个构造函数的原型指向另一个构造函数的实例对象来实现继承。

function Box() {                            //Box构造
    this.name = 'Lee';
}
function Desk() {                            //Desk构造
    this.age = 100;
}
Desk.prototype = new Box();                    //Desc继承了Box,通过原型,形成链条
var desk = new Desk();
alert(desk.age);
alert(desk.name);                            //得到被继承的属性

混合继承:
结合使用原型链与构造很熟继

function Box(age) {
    this.name = 'Lee'
    this.age = age;

}
Box.prototype.run = function () {               
        return this.name + this.age;
};
function Desk(age) {
    Box.call(this, age);      //构造函数继承继承了 name 和age 属性

}
Desk.prototype = new Box();        //原型链继承  run方法

var desk = new Desk(100);
alert(desk.run());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值