这些写函数原型的方法是等价的吗?
Are these ways of writing function prototype equivalent?
我一直习惯这样写函数原型声明:
var O = function () {};
O.prototype.fn = function () {}
但是有些开发人员这样写:
var O = function () {};
O.prototype.fn = function fn () {}
它们是相等的吗?如果不是,使用第二种方式的优势是什么?
var O = function () {};
O.prototype.fn = function fn () {}
var a = function _a() { }
和
var a = function () { }
前者称为命名函数表达式,
后者只是一个函数赋值。
NFE有两个优点
- 它有一个在堆栈跟踪中显示的名称。这大大提高了调试
- 它有一个名字,你可以在递归函数中使用
NFE有缺点。Kangax对它们进行了深入的讨论。
我个人在任何地方都使用NFE,忽略IE造成的内存泄漏。但是,由于IE将这些函数名泄漏到全局作用域中,因此应该努力使它们唯一。
由于IE有将这些名称泄漏到全局作用域的习惯,所以我尽量使它们唯一。
这就是为什么我在函数声明名称前加上_
var doSomeLogic = function _doSomeLogic() {
};
作为旁注,
有一个替代模式var O = function () {};
O.prototype.fn = function fn () {}
var obj = new O();
// prototype object
var O = {
fn: function _fn() { }
};
// factory
var o = function _o() { return Object.create(O); }
var obj = o();
如果在创建匿名函数时使用了名称,则可以在函数内部使用该名称:
var x = function y() {
y(); // here it exists
}
y(); // here it doesn't exist
的使用当然是有限的。您可以将其用于递归,或者将该方法作为回调函数挂接。
相关文章:
- 你能把一个匿名方法(函数)动态地变成一个命名方法吗
- 显示警报后调用方法/函数
- 使用来自 json 对象的参数动态调用方法/函数
- 创建具有动态参数排列的方法/函数
- 如何从其他 jsp 调用方法/函数以包含在另一个 jsp 的 jstree 中
- Objective-C 方法/函数调用.(来自JavaScript示例)
- 如何在android phongap应用程序中从javascript调用本机android方法(函数),而无需使用web
- 如何测试函数是否调用了特定的方法/函数
- 处理setTimeout(javascript)中的对象方法函数调用
- 简单级别,在DOM中选择元素,优化,创建方法函数
- 在不使用eval的情况下在方法函数中传递固定参数
- jQuery.html()方法函数文字参数
- animate方法函数执行意外延迟
- 对象方法javascript中的方法/函数
- Javascript私有方法:函数表达式与函数声明
- Jquery的oop重写方法函数
- 如何为数组/对象创建方法/函数
- 是否有可能发送我的对象与方法(函数)从服务器到客户端
- Javascript可以调用Django方法/函数吗
- 访问Backbone.js中的Ratchet 2.0方法/函数