以下是面试前JavaScript在线测试中的一个问题:
function F(){};
var a = new F();
var b = new F();
Run Code Online (Sandbox Code Playgroud)
Q:如何使对比a == b是true?(例如console.log(a == b) // true)
我回答说,这是不可能的,因为a和b是两个不同的实例F和JS等比较非原语的情况比较基准.
但前段时间我已经读过Axel Rauschmayer撰写的文章"在JavaScript中假运算符重载":http://www.2ality.com/2011/12/fake-operator-overloading.html - 我想知道是否有黑客攻击伪造运算符重载比较对象?
function define(prop, value) {
Object.defineProperty( /* context of caller */ , prop, {value: value});
}
function F() {
define('x', 42);
}
var f = new F();
Run Code Online (Sandbox Code Playgroud)
有没有办法获取调用函数的上下文(在上面的代码中内联注释)?
如果我绑定到这个(将注释替换为this)并在F构造函数中声明,它工作正常var def = define.bind(this);