JavaScript中的new-面向对象实现原理
2011-04-07 15:54
435 查看
javascript的new只是对class的一种模拟,这个也是业界说javascript的类根本不是类的原因——因为它是模拟的。
其实javascript的new关键字只不过做了五件事情。
1.创建Object
2.查找class的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)
3.将构造函数classA内部的this指向创建的Object
4.创建的Object的__proto__指向class的prototype
5.执行构造函数class
请看示例:
转载自http://constructor.iteye.com/blog/990434
其实javascript的new关键字只不过做了五件事情。
1.创建Object
2.查找class的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)
3.将构造函数classA内部的this指向创建的Object
4.创建的Object的__proto__指向class的prototype
5.执行构造函数class
请看示例:
// 定义类 类名字是 classA function classA(){ this.b=1; } classA.prototype.b=44; classA.prototype.show = function(){ alert(this.b); }; // 用new实例化 var b = new classA(); b.show(); // 用函数实例化 function newClass(cls,args){ var obj = {}; for(var p in cls.prototype) obj[p] = cls.prototype[p]; obj.__proto__ = cls.prototype; cls.apply(obj,args||[]); return obj; }; var k = newClass(classA); k.show();
转载自http://constructor.iteye.com/blog/990434
相关文章推荐
- 不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
- Python--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
- Javascript 类与静态类的实现-js面向对象
- Javascript 对象方式实现命名参数调用(上):原理和手动实现
- Javascript实现最简跨平台面向对象拖拽
- javascript 中面向对象实现 如何继承
- JavaScript面向对象简易实现
- 对象创建过程(new实现原理)
- javascript 面向对象,实现namespace,class,继承,重载
- Javascript面向对象特性实现(封装、继承、接口)
- JavaScript从入门到放弃(3)-对象的不同创建方法-实现真正的面向对象
- Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇
- 119_容器_自定义实现迭代器_深入迭代器_迭代器原理_面向对象实现
- js入门三JavaScript 面向对象实现
- 【译】不用构造函数(Constructor)也能实现JavaScript的面向对象
- day32--面向对象的程序设计之继承实现的原理(继承顺序)、封装、property
- javascript贪吃蛇二(完全面向对象实现)
- javascript 面向对象,实现namespace,class,继承,重载
- 泛型第四课,自定义实现迭代器、深入迭代器、迭代器原理,面向对象
- Javascript 面向对象机制的实现