码迷,mamicode.com
首页 > 其他好文 > 详细

new到底做了什么?

时间:2014-10-28 17:01:12      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   java   sp   div   on   

下面是一个实例化自定义的对象,我们将要对他进行分析

//定义构造函数
function A(){
    this.b = 1 //在这个对象里增加一个属性
    //不可以拥有返回对象的return语句
}
var obj = new A() //实例化一个对象
console.log(obj) //{ b: 1 }

 

在这个过程中new到底做了什么?

下面针对分析new A():

1.构造函数拥有一个叫prototype的属性,这里即A.prototype,这个对象默认有一个属性constructor,他的值是这个构造函数a。

2.javascript先创建一个空对象,先叫它做临时对象,它继承A.prototype的所有属性。

3.当A()执行完毕,再设置这个临时对象的属性this,值为A

4.如果没有返回语句,或者是返回对象的语句,那么返回的就是这个临时对象,否则返回的我们返回的对象。

 

当由构造函数进行对象实例化时,返回的对象是继承的谁?

先给出准确的解释

1.当没有返回语句,或者返回对象的语句时,返回的对象继承自a.prototype。

2.当返回的是一个对象时,主义,返回的对象是我们自己创建的对象,所以它继承自它构造函数的原型。

没有返回对象时:

//没有返回对象时
function A(){
    this.b = 1
}
var obj = new A() 
console.log(Object.getPrototypeOf(obj) === A.prototype) //true

有返回对象时

//返回对象时
function A(){
    return { b:1}
}
var obj = new A() 
console.log(Object.getPrototypeOf(obj) === A.prototype) //true
console.log(Object.getPrototypeOf(obj) === Object.prototype) //true

 

对已经实例化的对象的构造函数原型进行修改时,并不影响这个实例化对象

这里有一个实例可以说明这个现象

function A(){
    this.b = 1
}
var obj = new A() 
A.prototype = {b:10}
console.log(obj.b) //1

 

new到底做了什么?

标签:style   blog   io   color   ar   java   sp   div   on   

原文地址:http://www.cnblogs.com/winderby/p/4057074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!