写这篇文章基于自己多年的研究(嘿嘿,开个玩笑)
本文属于翻译,但是是按照自己理解的意思翻译的 ,原文链接:http://www.mollypages.org/misc/js.mp
1.所有实例也就是对象 继承于 创建他们函数的 原型对象;
反映在js 代码中形如下:
function foo(){
}
var obj = new foo();
obj 继承于 foo.prototype ;
foo.prototype.x= 21;
console.log(obj.x);
输出结果: 21;
2.不管存在/不存在 __proto__ 属性 ,一般的建议是所有的对象使用原型对象指向创建该对象的函数,这个属性成为javascript标准的一部分被称为 prototype(原型) 。原型对象,一般情况下有一个构造函数属性重新指向回这个原型的函数 ;
so 你可以理解为 :
function foo(){}
var obj = new foo();
obj.prototype = foo;
foo.prototype.constructor = foo ; //原型重新指向 函数本身;
Setting the same property via the object shadows/hides the same property in the prototype for that instance.
function foo() { }
f1 = new foo();
f2 = new foo();
foo.prototype.x = "hello";
f1.x => "hello"
f2.x => "hello";
f1.x = "goodbye"; //设置 f1.x 隐藏 foo.prototype.x
f1.x => "goodbye" //只会对 f1 隐藏 "hello" f2.x => "hello" delete f1.x f1.x => "hello"; //foo.prototype.x 又重新对 f1 是可见的.
Setting the property directly in the prototype changes it for all instances.
foo.prototype.x = "goodbye";
//now
f1.x => "goodbye"
f2.x => "goodbye";