为什么这个javascript单例方法有效

Why this javascript singleton method works

本文关键字:方法 有效 单例 javascript 为什么      更新时间:2023-09-26
function foo() {
    if (arguments.callee.self)
        return arguments.callee.self;
    arguments.callee.self = this;
    //do sth
}

我明白它什么时候这样称呼:

var a = foo();
当foo

被执行时,arguments.callee就是foo本身。所以它把它传递给未定义的变量 self。下次当另一个函数调用 foo 时,它会返回这个。显然,这将起作用。

当它像这样称呼时,事情似乎变得更加棘手:

var b = new foo();

我认为js引擎创建了foo的另一个实例并执行其代码。但似乎它传回了这个引用,因为 self 已经像 foo 的相同实例一样被定义。那么"新"在这里到底做了什么呢?

new调用函数作为构造函数。如果目标函数显式返回一个对象,则将返回该对象而不是刚刚创建的对象。

由于您在非严格模式下运行此代码,因此该函数在首次调用后显式返回全局对象,因此它不会返回新创建的对象new foo()