每一个javaScript对象(null除外)都和另一个对象相关联。“另一个对象”就是我们熟知的原型,每一个对象都从原型继承属性。
在ECMAScript5中,将对象作为参数传入Object.getPRototypeOf()中可以查询它的原型。
要检测一个对象是不是另一个对象的原型,可以通过isPrototypeOf()方法。例如可以通过p.isPrototypeOf(o)检测p是否是o的原型。
每一个函数都包含一个prototype属性,指向函数的原型对象。当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性。例如:
//这是一个构造函数,用以初始化新创建的“范围对象”function Range(from, to){ this.from = from; this.to = to;}//所有的“范围对象”都继承自这个对象//注意属性的名字是prototypeRange.prototype = { //如果x在范围内,则返回true;否则返回false includes: function(x){ return this.from <= x && x <= this.to; }, //对于范围内的每一个整数都调用一次f foreach: function(f){ for(var x = Math.ceil(this.from); x <= this.to; x++) f(x); }, //表示返回这个范围的字符串 toString: function(){ return "(" + this.from + "..." + this.to + ")"; }};var r = new Range(1, 3); //创建一个范围对象r.includes(2); //truer.foreach(console.log); //输出 1 2 3console.log(r.toString()); //输出 (1...3)原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时,它们才是属于同一个类的实例。而初始化对象的状态的构造函数则不能作为类的标识。两个构造函数的prototype属性可能指向同一个原型对象,那么这两个构造函数创建的实例是属于同一个类的。
新闻热点
疑难解答