首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么这个javascript单例方法可以工作

为什么这个javascript单例方法可以工作
EN

Stack Overflow用户
提问于 2012-06-08 06:48:47
回答 1查看 64关注 0票数 0
代码语言:javascript
运行
AI代码解释
复制
function foo() {
    if (arguments.callee.self)
        return arguments.callee.self;
    arguments.callee.self = this;
    //do sth
}

我能理解它的名字是这样的:

代码语言:javascript
运行
AI代码解释
复制
var a = foo();

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

当它被这样调用时,事情似乎变得更棘手了:

代码语言:javascript
运行
AI代码解释
复制
var b = new foo();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-08 06:55:48

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10944235

复制
相关文章

相似问题

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