首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在JavaScript中操作符的实例是什么?

在JavaScript中操作符的实例是什么?
EN

Stack Overflow用户
提问于 2010-03-15 17:50:19
回答 11查看 276.9K关注 0票数 348

当第一次遇到instanceof时,JavaScript中的JavaScript关键字可能会非常混乱,因为人们倾向于认为JavaScript不是面向对象的编程语言。

  • 那是什么?
  • 它解决了哪些问题?
  • 什么时候合适,什么时候不合适?
EN

Stack Overflow用户

发布于 2012-02-09 23:04:33

这里的其他答案是正确的,但它们没有深入了解instanceof的实际工作方式,这可能会引起一些语言律师的兴趣。

JavaScript中的每个对象都有一个原型,可以通过__proto__属性访问。函数还有一个prototype属性,它是它们创建的任何对象的初始__proto__。在创建函数时,将为prototype提供一个唯一的对象。instanceof运算符使用此唯一性给您一个答案。如果您将instanceof作为一个函数编写,下面是它的样子。

代码语言:javascript
复制
function instance_of(V, F) {
  var O = F.prototype;
  V = V.__proto__;
  while (true) {
    if (V === null)
      return false;
    if (O === V)
      return true;
    V = V.__proto__;
  }
}

这基本上是翻译ECMA-262版5.1 (也称为ES5),第15.3.5.3节.

注意,您可以将任何对象重新分配到函数的prototype属性,也可以在构造对象的__proto__属性之后重新分配它。这将给你一些有趣的结果:

代码语言:javascript
复制
function F() { }
function G() { }
var p = {};
F.prototype = p;
G.prototype = p;
var f = new F();
var g = new G();

f instanceof F;   // returns true
f instanceof G;   // returns true
g instanceof F;   // returns true
g instanceof G;   // returns true

F.prototype = {};
f instanceof F;   // returns false
g.__proto__ = {};
g instanceof G;   // returns false
票数 90
EN
查看全部 11 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2449254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档