gpt4 book ai didi

javascript - 这些编写函数原型(prototype)的方法是否等效?

转载 作者:行者123 更新时间:2023-11-29 10:23:05 24 4
gpt4 key购买 nike

我一直习惯这样写函数原型(prototype)声明:

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 talks about them in depth .

就个人而言,我到处都使用 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();

关于javascript - 这些编写函数原型(prototype)的方法是否等效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com