JavaScript中所有的对象都有它自己的构造函数。例如:
var number = new Number();
var string =new String();
var boolean = new Boolean();
var fun = new Function();
var obj = new Object();
我们知道一个number类型的变量也可以调用对象的toString方法,就是因为虽然number本身不具有tostring方法.但是number有一个proto属性,这个属性包含了对象的toString方法。所有实际上number调用toString方法时是对number.proto.toString()的调用。这个proto就是对象对于其共有属性的引用,同时在其构造函数上也存在一个prototype属性也指向该对象的共有属性。
所以我们可以得出一个推论: 对象.proto === 对象的构造函数.prototype。那么:
var number = new Number();
number._proto_ === Number.prototype;
var string =new String();
string._proto_ === String.prototype;
var boolean = new Boolean();
boolean._proto_ === Boolean.prototype;
var fun = new Function();
fun._proto_ = Function.prototype;
var obj = new Object();
obj._proto_ = Object.prototype;
然而我们知道构造函数本身也是对象,所有我们是不是可以推轮得出:
Number.prototype._proto_ === Object.prototype;
String.prototype._proto_ === Object.prototype;
Boolean.prototype._proto_ === Object.prototype;
另外,由于所有的函数都是由Function构造出来的。所有
Number._proto_ === Function.prototype;
Object._proto_ === Function.prototype;
Function._proto_ === Function.prototype;
这样一来,就形成了一种链式的数据结构,我们就叫这种为原型链。
另外:
Object.prototype._proto_ === null;
网友评论