为什么这个javascript单例方法有效
Why this javascript singleton method works
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()
相关文章:
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 在jQuery中创建向下滑动子菜单的最有效方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 将javascript数组中的项移动到特定位置的有效方法
- 将JS对象数组转换为嵌套形式的最有效方法
- 隐藏具有特定类$.each、for等的元素的有效方法
- 什么's是调用具有可变参数的函数的有效方法
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 使用 jQuery 调用 PHP 端点的最有效方法
- 比使用大量其他 if 语句更有效的方法
- 为什么不't我的Javascript,如果其他方法有效的话
- 为什么这种用于计算数组重复并将其存储到对象中的方法有效
- 为什么这个javascript单例方法有效
- 为什么此跨域请求解决方法有效
- 为什么在Lightswitch中堆叠承诺的一种方法有效,而另一种方法则不起作用
- 用jquery预处理html的一种方法有效,但为什么另一种方法无效't
- 控制器之间共享服务的脏检查,一种方法有效,另一种方法无效
- 在服务器和客户端之间共享JavaScript模型代码,这种方法有效吗