JS中一些判别从属的操作符

var myObject={a:2}

in操作符检查属性a是否在对象myObject及其[[Prototype]]原型链中

in操作符检查容器的时候,检查的是某个属性名是否存在而不是是否有某个值

 

hasOwnProperty只会检查a属性是否存在myObject对象中,不会检查[[Prototype]]原型链

function Foo(){}
var a=new Foo();

Instanceof回答的是,在整条[[Prototype]]原型链中是否有指向Foo.Prototype的对象

这个instanceof只能处理对象a和函数(带.Prototype引用的Foo)之间的关系,只用instanceof无法实现,而需要下面的方法:

b.isPrototypeOf(c)

这里判别的就是b是否出现在c的[[Prototype]]原型链中?这的c的prototype属性会自动被访问

我们也可以这样直接获取一个对象的[[Prototype]]原型链

Object.getPrototypeOf(a);

Object.getPrototypeOf(a)===Foo.prototype//true

大多数浏览器也支持一种非标准的方法来访问内部prototype属性:

a.__proto__===Foo.prototype;//true

注意事项两条下划线