gpt4 book ai didi

javascript - 函数异议符号?

转载 作者:行者123 更新时间:2023-11-30 13:23:24 25 4
gpt4 key购买 nike

我想知道以这种格式编写 javascript 是否有任何性能/优势?

var myFuncs = {
var firstFun = function() {
// do something
},

var secondFunc = function() {
// do something
},

var thirdFunc = function() {
// do something
}
}

所以他们可以这样称呼

myFuncs.firstFun();

我想了解这比 [除了代码可读性] 更有利吗?

最佳答案

函数与对象声明

你不能使用那个特定的语法,正确的形式是:

var myFuncs = {
firstFn: function () {},
secondFn: function () {},
...
};

在对象中编写函数的优势与命名空间和上下文有关。如果你写道:

var firstFn = function () {};
-or-
function firstFn() {}

该函数将在 window.firstFn 中定义。在 myFuncs 上添加函数使得可以在 window.myFuncs.firstFn 上访问这些函数。如果您希望您的 JavaScript 与其他脚本一起工作,您不希望您的 foo 函数与其他人的 foo 函数发生冲突:

<script src="a.js">
function foo() {...}
</script>

<script src="b.js">
function foo() {...} //this script would overwrite the foo function in a.js
</script>

<script src="c.js">
var bar = { //this script would be accessed at bar.foo()
foo: function () {..}
}
</script>

函数的调用上下文(this)也会不同:

function foo() {
console.log(this); //window
}
var bar = {
foo: function () {
console.log(this); //bar object
}
}

闭包语法

您可能对在闭包中声明函数的语法感到困惑:

(function () {
var foo = function () {...};
foo();
}());

在这种情况下,闭包用于防止函数污染全局范围(window.foo 将不会被设置)。这允许多个脚本使用相同的函数名称而不用担心被覆盖。


面向对象语法

对象语法通常用于定义 JavaScript“构造函数”的原型(prototype)。在 JS 中,所有函数都可以作为构造函数调用,只需在调用函数时使用 new 关键字即可:

function foo() {...}
var f = new foo(); //don't do it this way

为了可读性/可维护性/一致性,您应该始终使用 PascalCase 命名您的构造函数:

function Foo() {...} //tells other developers this is a constructor
function bar() {...} //tells other developers this is a function
var f = new Foo();
var b = bar();

在不迷失原型(prototype)如何工作的细节的情况下,您可以通过将对象分配给函数的 prototype 属性来分配要在函数的每个实例化对象之间共享的方法:

function Foo() {...}
Foo.prototype = { //note the use of the object declaration for the functions
bar: function () {...},
baz: function () {...},
...
};
var f = new Foo();
f.bar(); //calls the bar function that was defined in the prototype

关于javascript - 函数异议符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400041/

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