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

达尔文的进化论VS柏拉图的理念论

时间:2015-04-23 00:43:14      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

js 中每个对象都有一个__proto__属性,每个函数(函数也是对象)自然也有,但函数还有一个prototype属性。

function A(){this.x=0;}
var a=new A();
alert(a.__proto__===A.prototype)//true

以上构造函数相当于做了这三件事: 

1.创建一个对象a={ }
2.初始化它,A.call(a)
3.将a.__proto__属性赋值:a.__proto__=A.prototype

当a调用它没有的属性时,就去找a.__proto__也就是A.prototype中的同名属性。

下面一个有趣的例子:

function A(){}
A.prototype.v=1;
var a=new A();// a.__proto__指向A.prototype

A.prototype={v:2};
var a2=new A();// a2.__proto__指向新的A.prototype,但a.__proto__没变

alert(a.v);// 1
alert(a2.v);//2



柏拉图认为造物主以理念世界为蓝图或模型,造出世界万物体。如果把java类和对象的概念比作柏拉图的理念论,js则可以被比作达尔文的进化论。js没有类这个概念,每个对象都可以有或多或少的变异

达尔文的进化论VS柏拉图的理念论

标签:

原文地址:http://my.oschina.net/soitravel/blog/405266

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