【JavaScript编程】原型、原型链


一、原型


隐式原型

对象具有属性 __proto__,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。Object.getPrototypeOf()

原型属性

每个对象都会在其内部初始化一个属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。

constructor

原型对象也有一个属性,叫做 constructor,这个属性包含了一个指针,指回原构造函数。

关系
instance.constructor.prototype = instance.__proto__
判断
方法描述
hasOwnProperty()查找自身属性
instanceof对象(实例)与构造函数在原型链上是否有关系

二、原型链


定义
  • 当我们访问一个对象的属性时,如果自身有xxx属性,则访问它(自有属性);
  • 如果没有,就通过 __proto__ 属性找到其原型链的上一级原型对象,看它有没有xxx属性;
  • 如此递归查找,直至找到xxx属性或直到原型链顶端 Object.prototype 对象为止;
  • 如果整个原型链上都没有,才返回 undefind;
  • 我们把这种通过原型层层连接起来的关系称为原型链。
模拟原型链
var Shape = {
    getArea:function() {
        return "area: "+this.area;
    }
};
var Retangle = {
    getEdge:function() {
        return "edge: "+this.edge;
    }
};
var retangleIns = {
    area : 20,
    edge : 4
};

// 模拟原型链,将3个对象连接成一条原型链:
// Shape <- __proto__ <- Retangle <- __proto__ <- retangleIns
retangleIns.__proto__ = Retangle;
Retangle.__proto__ = Shape;

// 原型链连接后,getArea 和 getEdge 方法成功执行
console.log("原型链连接后,retangleIns.getArea() = " + retangleIns.getArea());
console.log("原型链连接后,retangleIns.getEdge() = " + retangleIns.getEdge());
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值