您的位置:首页 > Web前端 > JavaScript

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

请看示例:

// 定义类 类名字是 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: