JS中的原型与原型链

2019-07-10  本文已影响0人  丶stan

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;
上一篇下一篇

猜你喜欢

热点阅读