面试详解 原型链

原型链

创建对象的集中方法

第一类:字面量

var o1={name:'o1'}
var o11=new Object({name:'o11'})

第二类:构造函数

var M=function(){this.name='o2'}
var o2=new M()

第三类:Object.create()

var P={name:'o3'}
var o3=Object.create(P)
原型、构造函数、实例、原型链

在 JavaScript 中,每当定义一个对象(函数也是对象)时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象。原型对象,顾名思义,它就是一个普通对象。

img

在这里插入图片描述

在这里插入图片描述

instanceof的原理

用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置

简单实现
function new_instance_of(obj, typeObject) { 
    let rightProto = typeObject.prototype; // 取类型对象的 prototype 值
    obj = obj.__proto__; // 取对象的__proto__值
    while (true) {
    	if (obj === null) {
            return false;	
        }
        if (obj === rightProto) {
            return true;	
        } 
        obj = obj.__proto__ 
    }
}
new运算符
  1. 一个新对象被创建。它继承自foo.prototype

  2. 构造函数foo被执行,执行的时候,相应的参数会被传入,同时上下文(this)会被指定为这个新实例,new foo等同于new foo(),只能用在不传递任何参数的情况下

  3. 如果构造函数返回了一个对象,那么这个对象会取代new出来的结果,如果函数没有返回对象,那么new出来的结果为步骤一创建的对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值