为什么在Javascript中RegExp有一个双对象原型
Why in Javascript RegExp have a double Object prototype
我对一个正则表达式有一个与对象"类"相关的双原型链非常感兴趣。
//object Object --> Object --> Null
var regex = (/checking'sprototypes/gmi);
console.log(toString.call(regex.__proto__.__proto__.__proto__));
为什么会发生这种情况?
当我打印regex.__proto__
时,我得到"对象原型"而不是RegExp原型。如果我打印regex.__proto__.__proto__
,我也会得到"对象原型"。
查看此代码以获取更多示例http://codepen.io/gpincheiraa/pen/pEydja
JavaScript中的继承不是建立在类上,而是建立在原型上。对象原型向基于这些原型的其他对象公开可用的属性和方法,并且可以在层次结构中链接。
regex.__proto__; // RegExp prototype
regex.__proto__.__proto__ // Object prototype
regex.__proto__.__proto__.__proto__ // null
这里可以看到正则表达式有一个原型,这个原型是RegExp
原型,它暴露了exec
和test
等正则表达式特定的方法。RegExp
原型又以Object
原型为基础,后者公开了(几乎)所有对象共同的方法和属性,比如hasOwnProperty
或__proto__
getter本身。Object
原型是层次结构的顶端,没有原型(null
)。
相关文章:
- 重载JS'firefox中的对象原型
- 带有对象/原型的链式承诺(Q延期)
- 别名或以其他方式合并两个具有不同名称的相同对象原型
- 创建后指定对象原型
- javascript对象原型与jquery冲突
- 为什么我要将函数添加到对象原型中,而不是将其添加到对象中
- 基本对象/原型语法问题
- Javascript对象/原型.我的理解错了吗
- ES6 const,用于在JavaScript中创建对象原型;这是一种模式吗
- 在角度表达式中使用对象原型
- 对象原型和继承
- 为什么javascript对象原型被称为“fn”
- Uncaught TypeError:对象原型在Symfony 2中只能是Object或ExtJS为null
- 在Javascript中将对象原型函数绑定到对象
- 对象原型在Canvas Game中不起作用
- 如何获取Javascript对象原型的属性
- 为对象原型提供一个方法,该方法指向对象自身属性的值
- 向对象原型添加命名空间方法
- 在Vanilla Javascript中使用窗体中的对象原型创建多个用户
- Javascript对象原型错误