JavaScript原型对象怎么理解?

JavaScript原型对象如何理解?原型对象的意义是什么呢?

简单来说,在一般的面向对象的语言(比如Java)中,我们使用类作为对象的模板。
对象是类的实例。
在JS中,我们用另一种方式,那就是原型,也就是把一个对象本身当作类型,如果我们需要一个对象,就通过克隆一份作为原型的对象而得到新的对象。

http://segmentfault.com/q/1010000000209832

回复caozhy:

比如我建立一个构造函数:

fucntion Box(){};                                         //首先创建一个空的构造函数
Box.prototype.name = "Lee";                      //在原型里添加属性
Box.prototype.age = 100;
Box.prototype.run = function(){                   //在原型里添加方法
    return this.name + this.age + "运行中...";
}
var box1 = new Box("Lee",100);                   //根据原型创建两个实例
var box2 = new Box("Jack",500);
alert(box1 == box2);                                   //返回false,两个原型不同
alert(box1.run == box2.run);                        //返回true,两个原型的方法的引用地址相同
alert(box1.run() == box2.run());                    //返回true,两个原型的方法的值相同,都是“Lee100正在运行中...”

不明白,为何原型的方法的引用地址相同,但是创建不同实例时,方法的值却是相同的?

累了,不想多说了,直接修改下你的代码,自己看吧

 <script type="text/javascript">
function Box(name, age){                                        //两个参数的构造函数
this.name = name;                      //在原型里添加属性
this.age = age;
};
Box.prototype.run = function(){                   //在原型里添加方法
    return this.name + this.age + "运行中...";
}
var box1 = new Box("Lee",100);                   //根据原型创建两个实例
var box2 = new Box("Jack",500);
alert(box1 == box2);                                   //返回false,两个原型不同
alert(box1.run == box2.run);                        //返回true,两个原型的方法的引用地址相同
alert(box1.run() == box2.run());                    //返回false
alert(box1.run());
alert(box2.run());
</script>

你的问题是,你的对象创建使用的是硬编码的lee/100,构造函数形同虚设。
run加上括号就是调用,执行出来当然都是一个结果,两个字符串相同,当然true

我来解释下为什么引用的地址相同,js中明确写到,它的机智是reference链表
它的所有变量,方法都是在一个表结构中,当你用一个变量赋值给另一个变量时,它并不创建新的存储空间
而是把变量名指向最初的一个引用,一个别名。比如 var b=2; c=b;就是一个引用