JS基础之instanceof

本文详细介绍了JavaScript中的instanceof运算符,用于检测构造函数的prototype是否在对象的原型链上。通过实例展示了其基本用法和可能遇到的变化情况,如原型链的改变将影响instanceof的结果。同时,文章提醒读者注意此特性在特定情况下的行为变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS的instanceof详解

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上,返回值为布尔值。

语法 : object instanceof constructo

参数

object:某个实例对象

constructor:某个构造函数

简单例子
			function Car(make, model, year) {
			  this.make = make;
			  this.model = model;
			  this.year = year;
			}
			const auto = new Car('Ho', 'Ac', 2020);
			
			console.log(auto instanceof Car);
			// expected output: true
			
			console.log(auto instanceof Object);
			// expected output: true

返回值为布尔值。

应用例子
			function C(){}
			function D(){}
			
			var o = new C();
			
			
			o instanceof C; // true,因为 Object.getPrototypeOf(o) === C.prototype
			
			
			o instanceof D; // false,因为 D.prototype 不在 o 的原型链上
			
			o instanceof Object; // true,因为 Object.prototype.isPrototypeOf(o) 返回 true
			C.prototype instanceof Object // true,同上
			
			C.prototype = {};
			var o2 = new C();
			
			o2 instanceof C; // true
			
			o instanceof C; // false,C.prototype 指向了一个空对象,这个空对象不在 o 的原型链上.
			
			D.prototype = new C(); // 继承
			var o3 = new D();
			o3 instanceof D; // true
			o3 instanceof C; // true 因为 C.prototype 现在在 o3 的原型链上

需要注意的是,如果表达式 obj instanceof Foo 返回 true,则并不意味着该表达式会永远返回 true

因为 Foo.prototype属性的值有可能会改变,改变之后的值很有可能不存在于 obj 的原型链上,这时原表达式的值就会成为 false。

另外一种情况下,原表达式的值也会改变,就是改变对象 obj 的原型链的情况,虽然在目前的ES规范中,我们只能读取对象的原型而不能改变它,但借助于非标准的 __proto__ 伪属性,是可以实现的。比如执行 obj.proto = {} 之后,obj instanceof Foo 就会返回 false 了。

以上就是js属性对象的hasOwnProperty方法!喜欢的点个赞或者收藏!方便以后查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值