1.创建对象有几种方法、

//字面量

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

var object = new Object({name:1})

var o1 ={name:1}

//构造函数

var M = function(m){

this.name =m

}

var o2 =  new M(3);

//object.create方法

var p = {name:1}

var o4 = Object.create();

2.原型 构造函数 实例 原型链

对象就是一个实例

new后面的就是一个构造函数

构造函数可以new一个实例

任何一个函数都可以作为构造函数

构造函数都有属性prototype 初始化一个空对象(原型对象)

构造器默认你声明的函数,来让原型对象知道自己是被哪个构造器够早的

constructor函数指向的是构造函数

实例.__proto__ === 构造函数.原型对象

原型链

object.prototype是原型链的顶端

在实例中没有找到的话。会向他上一层找,一直找到object.prototype,如果还没有找到就返回未定义

 原型链 随笔

 

 自我理解总结:

 实例是由构造函数来生成的,但是跟他不是直接挂钩的  与构造函数的属性prototype的原型对象挂钩的

关系:实例.__proto__ === 构造函数.原型对象

原型对象的constructor函数 === 构造函数

构造函数都有属性prototype 是一个空对象,也就是原型对象

原型链

3.instanceof的原理

o3是不是m的实例

o3 instanceof m === true

o3 instanceof Object === true

o3.__proto__ === M.prototype

M.prototype.__proto__ === Object.prototype

o3.__proto__.constaructor === m  === true

o3.__proto__.constaructor === object  === false

构造函数也是一个对象

constaructor比instanceof更严谨

 

4.new运算符的原理

 

一个对象被new  继承构造函数的原型对象foo.prototype

构造函数被执行,this要指定新实例  new foo === new foo()

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄