JavaScript 检测原型对象
■知识点
在JavaScript中,Function对象预定义了 prototype属性,该属性指向一个原型对象。当定义构造函数时,系统会自动创建一个对象,并传递给prototype属性,这个对象被称为原型对象。原型对象可以存储构造类型的原型属性,以便让所有实例对象共享。
■实例设计
下面的代码为自定义类型函数定义两个原型成员。
var f = function (){}
f.prototype = {
a : 1,
b : function (){
return 2;
}
}
console.log (f.prototype, a) ; //读取函数的原型对象的属性a,返回1
console.log (f. prototype.b() ) ; //读取函数的原型对象的属性b,返回2
当使用new运算符调用函数时,就会创建一个实例对象,这个实例对象将继承构造函数的原型对象中所有属性。
var o = new f (); //实例对象
console.log (o.a); //访问原型对象的属性
console.log (o.b ()); //访问原型对象的厲性
为了方便判定,Object对象定义了 isPrototypeOf()方法,该方法可以检测一个对象的原型对象。针对上面的示例,可以判断f.prototype就是对象o的原型对象,因为其返回值为true。
var b = f.prototype.isPrototypeOf(o);
console.log(b);
■小结
下面的示例演示了各种特殊对象的原型对象。
函数的原型对象可以是Object.prototype或者是Function.prototype:
var f = function (){}
console.log(Object.prototype.isPrototypeOf(f)); //返回 true
console.log(Function .prototype.isPrototypeOf(f)); //返回 true
Object和Function对象的原型对象比较特殊:
console.log(Function .prototype.isPrototypeOf(Object)); //返回 true
console.log(Object.prototype.isPrototypeOf(Function)); //返回 true
Object.prototype 和 Function.prototype 的原型对象不是Object.prototype,而 Function.prototype 的原型对象可以是Function.prototype,但是Object.prototype的原型对象绝对不是Function .prototype:
console.log (Object.prototype.isPrototypeOf (Object.prototype)); //返回 false
console.log (Object.prototype.isPrototypeOf (Function .prototype)); //返回 true
console.log (Function.prototype.isPrototypeOf (Function.prototype)); //返回 false
console.log (Function.prototype.isPrototypeOf (Object.prototype)); //返回 false
点击加载更多评论>>