对instanceof
运算符简介
在Javascript中,判断一个变量的
类型将尝试使用typeof运算符。使用typeof运算符时,会有与引用类型存储值的问题。不管是什么类型的对象引用,它将返回到了另一个object.ecmascript java
操作,实例,来
解决这个问题。instanceof运算符类似typeof运算符和用于
识别所
处理的对象的类型。不同类型的
方法,这是方法需要开发商明确这个对象是一个特定的类型,例如:
清单1。实例实例
无功ostrinbject =新的字符串(Hello World);
console.log(ostrinbject是字符串); / /输出真
此代码要求如果变ostrinbject是字符串object.ostrinbject实例确实是字符串对象的一个实例,所以结果是真的。虽然它不是typeof方法灵活,instanceof方法仍然是有用的当方法返回的对象的类型。
instanceof运算符的常规用法:
一般来说,使用instanceof来判断是否属于某一类的一个实例。例如:
清单2。建议
经常使用
以确定它是否是富类的一个实例。
函数(富){ }
新富();
console.log(foo instanceof Foo) / /真的
此外,更重要的是,是可以用来判断一个实例属于继承关系的父类型,例如:
清单3。建议使用的继承关系
以确定它是否是富类的一个实例,其父是该类型的实例。
功能(AOO){ }
函数(富){ }
foo.prototype =新AOO(); / / Javascript原型继承
新富();
console.log(foo instanceof Foo) / /真的
console.log(foo instanceof AOO) / /真的
上面的代码是确定在一层继承关系的父类,和instanceof运算符是在多层继承关系一样。
你真的知道你的instanceof运算符
看看上面的例子,你认为这是操作很简单,和这里的一些更复杂的应用。
清单4。是复杂的使用
console.log(对象实例对象); / /真的
console.log(函数是函数); / /真的
console.log(数是数); / /假
console.log(字符串是字符串); / /假
console.log(函数实例对象); / /真的
console.log(foo instanceof功能); / /真的
console.log(foo instanceof Foo); / /假
上面的代码看起来又头晕吗为什么对象和功能是相当真实的,和其他类的实例本身不等于真的吗你怎么解释呢得到的是神秘的一个基本的了解,我们需要从两个方面入手:1、如何在
语言规范中定义的操作。2、Javascript原型继承机制。
清单5。Javascript实例操作代码
功能instance_of(L,R){ / / L代表左表达式,R代表
正确的表达
var o = r.prototype; / /
显示原型R
我l.__proto__; / /隐原型L
当(真){
如果(l = NULL)
返回false;
如果(o = L)这里的焦点:当O正好等于L,或真的
返回true;
我l.__proto__;
}
}
清单6。对象实例对象
为了便于表达式的表达,首先给出了左右表达式的表达式。
objectl =对象,objectr =对象;
按规范逐步演绎
O = = object.prototype objectr.prototype
我objectl __proto__ = function.prototype。
第一判决
o!= L
找到我和__proto__ /周期
L =函数原型。__proto__ = object.prototype
第二次判决
O = L
返回true
清单7。函数是函数
为了便于表达式的表达,首先给出了左右表达式的表达式。
功能:功能、functionR =功能;
按规范逐步演绎
O = = function.prototype functionr.prototype
L = = function.prototype __proto__功能。
第一判决
O = L
返回true
清单8。instanceof Foo Foo
为了便于表达式的表达,首先给出了左右表达式的表达式。
傻瓜= foo,傻瓜= foo;
按规范逐步演绎
O = = foo.prototype foor.prototype
L =傻瓜。__proto__ = function.prototype
第一判决
o!= L
/ /周期再次找到我,__proto__
L =函数原型。__proto__ = object.prototype
第二次判决
o!= L
再次找到L / / __proto__
L =对象的原型。__proto__ = null
第三判断
l = null
返回false
对instanceof在道场的继承机制的应用分析
在Javascript中,没有多重继承这一概念,就像java。但使用时向道场声明一个类,它允许从多个类继承。让我们把道场1.6.1为例。
清单9。在道场的多重继承
Dojo.declare(AOO
Dojo.declare(嘘
Dojo.declare(Foo,{ Aoo,嘘},{ });
新富();
console.log(foo instanceof AOO); / /真的
console.log(foo instanceof BOO); / /假
console.log(foo.isinstanceof(AOO)); / /真的
console.log(foo.isinstanceof(BOO) / /真实);
在上面的例子中,foo从AOO和嘘声的同时,但当instanceof运算符是用来
检查是否foo是嘘的一个实例,则返回false。事实上,在道场,foo仍然继承了来自Aoo和拷贝的方法和
属性在嘘类Foo通过混合机制。所以当instanceof运算符用于检查实例的嘘声,它将返回false。所以道场增添了一种新的方法为每一个类的实例isinstanceof,用这种方法检查多重继承。