文章导航

JavaScript isPrototypeOf()

2018-10-31 01:35| 作者: admin| 查看: 619| 评论: 0|来自: 蚂蚁部落

isPrototypeOf方法可以检测一个对象是否在另一个对象的原型链上。

如果在,则返回true,否则返回false。

结合此方法名称有助于理解,isPrototypeOf由如下几个单词合成:
(1).is:在疑问句大致为"是否"的意思。

(2).prototype:原型。

(3).of:表示归属。

更多Object对象内容参阅JavaScript Object 对象一章节。

语法结构:

[JavaScript] 纯文本查看 复制代码
prototypeObj.isPrototypeOf(object)

参数解析:

(1).prototypeObj:一个对象。

(2).object:必需,判断prototypeObj对象是否在object对象原型链上。

浏览器兼容:

(1).IE浏览器支持此方法。

(2).edge浏览器支持此方法。

(3).谷歌浏览器支持此方法。

(4).火狐浏览器支持此方法。

(5).Opera浏览器支持此方法。

(6).Safari浏览器支持此方法。

代码实例如下:

[JavaScript] 纯文本查看 复制代码运行代码
let webName = {webName:"蚂蚁部落"};
let web = Object.create(webName);
console.log(webName.isPrototypeOf(web));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013615l4bbg1egwuvnbxxw.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

代码分析如下:

(1).通过Object.create方法创建对象web,此对象的原型是webName。

(2).很自然此方法的返回值是true。

[JavaScript] 纯文本查看 复制代码运行代码
function A(){}
function B(){}
function C(){}
B.prototype=new A();
C.prototype=B.prototype;
console.log(B.prototype.isPrototypeOf(new C()));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013648hetp5zieppnkrivv.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

构造函数C的原型与构造函数B的prototype原型指向同一个对象。

于是B.prototype自然就是C对象实例的原型对象。

再来看一段代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
function A(){}
function B(){}
function C(){}
B.prototype=new A();
C.prototype=B.prototype;
console.log((new C()).__proto__==B.prototype);

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201810/31/013723kmpubw2umi4bpite.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

假设构造函数F,然后创建它的对象实例f,那么对象实例f的__proto__属性指向F.prototype。

通过__proto__属性可以将原型串成一条链,也就是原型链。

特别说明:虽然当前主流浏览器都支持__proto__属性,但是推荐使用isPrototypeOf方法判断。

[JavaScript] 纯文本查看 复制代码运行代码
function Foo(){}
let f=new Foo();
console.log(Foo.prototype.isPrototypeOf(f));
console.log(Object.prototype.isPrototypeOf(f));

代码运行效果截图如下:

a:3:{s:3:\"pic\";s:43:\"portal/201811/28/224823ag4i0dv0igs026vy.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

第二个打印结果也是true,虽然Object.prototype不是f的直接原型对象,但是在其原型链上。

相关阅读:

(1).prototype参阅JavaScript prototype 原型一章节。

(2).原型链参阅JavaScript 原型链一章节。

(3).__proto__参阅__proto__属性一章节。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部