instanceof 内部机制探析

作者:lifesinger 来源:岁月如歌 时间:2009-09-25 13:09:00 

在 JavaScript 中,可以用 instanceof 来判断一个对象是不是某个类或其子类的实例。比如:

// 代码 1
function Pig() {}
var pig = new Pig();
alert(pig instanceof Pig); // => true

function FlyPig() {}
FlyPig.prototype = new Pig();
var flyPig = new FlyPig();
alert(flyPig instanceof Pig); // => true

来看另一段代码:

// 代码 2
function Pig() { Pig.prototype = {/* some code */} }
var pig = new Pig();
alert(pig instanceof Pig); // => false

为何上面的猪 pig 不再是猪 Pig 了呢?

当一个对象是某个类的实例时,意味着这个对象具有该类的方法和属性。在 JavaScript 中,一个猪类的特性体现在原型中:

// 代码 3
function Pig() {}
Pig.prototype = {
    "吃猪食": function() {},
    "睡觉": function() {},
    "长膘": function() {}
};
var pig = new Pig();
alert(pig instanceof Pig); //=> true

如果动态改变了猪的特性,让猪变成了牛:

// 代码 4
Pig.prototype = {
    "吃草": function() {},
    "犁田": function() {}
};
var niu= new Pig();
alert(pig instanceof Pig); //=> false
alert(niu instanceof Pig); //=> true

当未改变 Pig 的 prototype 时,猪还是猪,因此代码 3 中 pig 是 Pig 的实例。当改变 prototype 后,猪已经不是猪,而是披着猪皮的牛了。因此代码 4 中 pig 不再是 Pig 的实例,niu 反而是 Pig 的实例。

标签:JavaScript,instanceof,类,子类
0
投稿

猜你喜欢

  • python 怎样进行内存管理

    2021-04-27 16:46:18
  • python使用matplotlib绘制图片时x轴的刻度处理

    2022-05-05 01:38:56
  • python实现下载指定网址所有图片的方法

    2021-05-17 22:12:16
  • python3实现多线程聊天室

    2021-09-11 07:35:47
  • Python中OpenCV Tutorials 20  高动态范围成像的实现步骤

    2022-04-02 07:24:20
  • Python的iOS自动化打包实例代码

    2022-04-18 01:15:19
  • python递归计算N!的方法

    2021-11-11 21:11:31
  • Python使用smtplib模块发送电子邮件的流程详解

    2023-09-28 03:28:35
  • python代码区分大小写吗

    2023-11-26 11:23:46
  • Python模块结构与布局操作方法实例分析

    2021-11-26 10:49:31
  • pandas读取csv文件提示不存在的解决方法及原因分析

    2022-10-27 19:08:02
  • Python中运行并行任务技巧

    2022-12-30 01:13:33
  • python操作mysql、excel、pdf的示例

    2024-01-14 17:43:27
  • getdata table表格数据join mysql方法

    2024-01-25 17:55:08
  • python 密码加密与解密的实现

    2023-07-31 04:32:38
  • Python3中的f-Strings增强版字符串格式化方法

    2022-07-07 12:34:36
  • python中requests模块的使用方法

    2021-12-27 23:16:29
  • 解读! Python在人工智能中的作用

    2022-02-20 20:51:54
  • FrontPage 2002应用技巧四则

    2008-08-17 10:57:00
  • mpvue+vant app搭建微信小程序的方法步骤

    2024-05-29 22:22:42
  • asp之家 网络编程 m.aspxhome.com