标签:
原形是javascript特有的一个‘东西‘,它可以用来实现继承。
首先,每声明一个函数,这个函数就自动会有一个prototype属性,这个属性会指向一个对象,而这个对象是就我们常说的原形对象。
foo(){ } console.log(foo.prototype) // Object (原形对象)
而这个原形对象中最开始都有什么呢? 答案是:一个constructor和一个_proto_(稍后再说这个)。
原形对象的constructor中是一个函数,它就是 foo(){}。
接着,我们可以在原形对象里声明属性或者方法。类似这样
foo.prototype.alertMsg = ‘错误,请重试‘; foo.prototype.add = function(x,y){ return x+y; };
对一个普通函数来说,上面的都是其实都没什么用。
但是,当foo是一个构造函数的时候,
function foo(name){ this.name = name console.log(this) } foo(‘莉莉‘) //普通函数的this指向的是window对象,this.name = name就是给window对象添加了一个name属性,值就是 莉莉
foo.prototype.hello = function(){ alert(‘hello‘); } var obj = new foo(‘小明‘);//通过此构造函数创建对象 console.log(obj) //obj中有一个属性name是小明,然后还有一个_proto_这个私有对象,他不能直接访问,他指向的就是foo的原形对象,所以他里面会有hello这个方法。
而当我们多次通过这个构造函数创建对象的时候,他们都会指向同一个原形对象,这样就节省了内存,也便于管理和维护
未完待续
标签:
原文地址:http://www.cnblogs.com/fuzy/p/5696853.html