首先,instanceof可以检查某个实例是否是由某个构造函数生成的,由于它是用原型链来检查,所以百分百正确,不像constructor可能会被程序员改变。
-
instanceof操作的伪代码如下:
function instance_of(L, R) {
var o = R.prototype;
L = L.proto;
while(true){
if(L === null) return false; //该实例是用Object.create(null)构造出来的,没有原型
if(L === o) return true; //R在L的原型链上
L = L.proto;
}
}- 解析:先取右边构造函数的原型对象,然后遍历左边实例的原型链上的各个prototype,如果有一次两者指向的是同一个prototype对象,就返回true,说明左边是右边生出的实例。或者右边的子类生出的实例。
-
在非严格模式下,用instanceof可以检查构造函数在被调用时是否有new,以此来编写作用域安全的构造函数(也就是即使调用构造函数时忘了用new,也能正常运行)
- 因为只有new出来的实例,在运行function内部的代码时,this才会指向新对象,而此时 this instanceof Func已经能够正确判断。
代码如下:
function Person(name) {
if(this instanceof Person){
// call with "new"
this.name = name;
}else {
// call without "new"
return new Person(name);
}
}
js--instanceof操作符详解
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.理解对象 创建自定义对象的最简单方式就是创建一个Object 的实例,然后再为它添加属性和方法 用对象字面量语...
- 普通创建对象和字面量创建对象不足之处:虽然 Object 构造函数或对象字面量都可以用来创建单个对象,但这些方式有...
- 1、构造函数模式 [url=]file:///C:/Users/i037145/AppData/Local/Tem...
- Chapter 6 面向对象的程序设计 理解对象 使用对象字面量语法创建对象var person = { n...