ECMAScript-262 edition 3 中 instanceof 运算符的定义
2015-10-28 10:27
323 查看
function instance_of(L, R) {//L 表示左表达式,R 表示右表达式 var O = R.prototype;// 取 R 的显示原型 L = L.__proto__;// 取 L 的隐式原型 while (true) { if (L === null) return false; if (O === L)// 这里重点:当 O 严格等于 L 时,返回 true return true; L = L.__proto__; } } console.log(Object instanceof Object);//true console.log(Function instanceof Function);//true
console.log(Foo instanceof Function);//true console.log(Foo instanceof Foo);//false
Object instanceof Object
// 为了方便表述,首先区分左侧表达式和右侧表达式 ObjectL = Object, ObjectR = Object; // 下面根据规范逐步推演 O = ObjectR.prototype = Object.prototype L = ObjectL.__proto__ = Function.prototype // 第一次判断 O != L // 循环查找 L 是否还有 __proto__ L = Function.prototype.__proto__ = Object.prototype // 第二次判断 O == L // 返回 true
Function instanceof Function
// 为了方便表述,首先区分左侧表达式和右侧表达式 FunctionL = Function, FunctionR = Function; // 下面根据规范逐步推演 O = FunctionR.prototype = Function.prototype L = FunctionL.__proto__ = Function.prototype // 第一次判断 O == L // 返回 true
Foo instanceof Foo
// 为了方便表述,首先区分左侧表达式和右侧表达式 FooL = Foo, FooR = Foo; // 下面根据规范逐步推演 O = FooR.prototype = Foo.prototype L = FooL.__proto__ = Function.prototype // 第一次判断 O != L // 循环再次查找 L 是否还有 __proto__ L = Function.prototype.__proto__ = Object.prototype // 第二次判断 O != L // 再次循环查找 L 是否还有 __proto__ L = Object.prototype.__proto__ = null // 第三次判断 L == null // 返回 false
相关文章推荐
- 学生选课数据库SQL语句练习题
- 获取adb root权限
- enum枚举
- 雨点点的博客 内存管理 内存优化
- eNSP 1.2.00.370
- hdoj 1873 看病要排队
- iOS9中spotlight的简单使用
- shell 监控mysql状态
- sql 之 c++测试代码
- 采用PopupWin控制消息推送功能
- 当手机被PS掉,人们看到的是手中的灵魂
- POJ 3268
- LeetCode Nim Game (简单nim)
- Sizegrip 实例
- linux中 likely与unlikely
- C中如何调用C++函数
- Linux文本处理与正则表达式
- eclipse提示workspace无法打开的问题
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)
- cocos2dx Material System讲解一