关于isPrototypeOf()方法,在此我把前面讲的原型模式图中的代码直接拿过来用。我们先来看看isPrototypeOf()方法的语法:
语法
isPrototypeOf()函数用于指示对象是否存在于另一个对象的原型链中。如果存在,返回true,否则返回false。
function.prototype.isPrototypeOf(object)
参数列表
参数 | 描述 |
---|---|
function | 必须 原型对象的函数名 |
object | 必须 一个实例对象 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function Person(){
}
Person.prototype.name="Nicholas";
Person.prototype.age=29;
Person.prototype.job="software Engineer";
Person.prototype.sayName=function(){
return this.name;
}
var person1=new Person();
var person2=new Person();
document.write(person1.sayName());
document.write("<br>");
//下面我们来分别检测一下person1与person2分别是否处在Person对象的原型链中
document.write(Person.prototype.isPrototypeOf(person1));
document.write("<br>");
document.write(Person.prototype.isPrototypeOf(person2));
</script>
</body>
</html>
output:
Nicholas
true
true
getPrototypeOf()
返回对象的原型。
语法
Object.getPrototypeOf(object)
参数
object
必需。引用原型的对象。
返回值
object 参数的原型。原型也是对象。
异常
如果 object 参数不是对象,则将引发 TypeError 异常。
本来没打算给getPrototypeOf写实例的,但我发现我错了,对于javascript中的原型链问题,上述两个方法必须搞懂。一点也不能马虎。在此我还是引用上述实例来说明
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script type="text/javascript">
function Person(){
}
Person.prototype.name="Nicholas";
Person.prototype.age=29;
Person.prototype.job="software Engineer";
Person.prototype.sayName=function(){
return this.name;
}
var person1=new Person();
var person2=new Person();
document.write(person1.sayName());
document.write("<br>");
//下面我们来分别检测一下person1与person2分别是否处在Person对象的原型链中
document.write(Person.prototype.isPrototypeOf(person1));
document.write("<br>");
document.write(Person.prototype.isPrototypeOf(person2));
//为了说明getPrototypeOf,在此我还是想采纳上述的例子
var Obj1=Object.getPrototypeOf(person1);
Obj1.sex="男";
document.write("<br>");
document.write(person1.sex);
document.write("<br>");
//为了验证Object.getPrototypeOf()方法返回的是否是对象的原型,在此我特意将以下两者进行了比较。最后被证实是完全相等的。
document.write(Obj1===Person.prototype);
</script>
</body>
</html>
output:
Nicholas
true
true
男
true
参考资料:
《javascript高级程序设计》
http://www.365mini.com/page/javascript-isprototypeof.htm
https://msdn.microsoft.com/library/bch72c9e(v=vs.94).aspx
getPrototypeOf
https://msdn.microsoft.com/library/ff877835(v=vs.94).aspx