new关键字具体做了什么?

用 var anObject = new aFunction() 形式创建对象的过程实际上可以分为三步:

第一步是建立一个新对象;

第二步将该对象内置的原型对象设置为构造函数prototype引用的那个原型对象;

第三步就是将该对象作为this参数调用构造函数,完成成员设置等初始化工作。

其实javascript的new关键字只不过做了五件事情:

1.创建Object

2.查找class的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)

3.将构造函数classA内部的this指向创建的Object

4.创建的Object的__proto__指向class的prototype

5.执行构造函数class

// 定义类 类名字是 classA

functionclassA(){

this.b=1;

}

classA.prototype.b=44;

classA.prototype.show =function(){

alert(this.b);

};

// 用new实例化

varb =newclassA();

b.show();

// 用函数实例化

functionnewClass(cls,args){

varobj = {};

for(varpincls.prototype)

obj[p] = cls.prototype[p];

obj.__proto__ = cls.prototype;

cls.apply(obj,args||[]);

returnobj;

};

vark = newClass(classA);

k.show();

推荐阅读更多精彩内容

  • 我基本從來不寫工作的事兒。 因為工作實在沒啥好寫的,不就是工作唄。 然後今天打算稍微寫一點,就寫JS吧。 我一直相...
    LostAbaddon阅读 1,230评论 22 21
  • ECMAScript关键字 delete do else finally function in instance...
    doudou2阅读 417评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    萌萌的小伟哥阅读 1,006评论 0 9
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 6,717评论 2 17
  • 练习45:一个简单的TCP/IP客户端 原文:Exercise 45: A Simple TCP/IP Clien...
    布客飞龙阅读 351评论 0 34