我看到一个带有下划线的js函数。所以我尝试这样编写,但我无法调用该函数。为什么js函数只能由_
命名?任何人都可以解释这种语法吗?
function Test(){
var a=1;
function _(abc){
console.log(abc);
}
}
然后尝试调用该函数但没有任何反应
(new Test()._(dsdf));
答案 0 :(得分:1)
你的函数在Test
之外是不可见的。在你的例子中你创建了一个Test
的对象。如果你想在对象上调用一个函数,它必须是对象的一个成员。所以你需要在函数中使用'this'。
function Test() {
var a=1;
this._ = function(abc) {
console.log(abc);
}
}
new Test()._('aa');
答案 1 :(得分:1)
最初,您必须以调用Test
构造函数的方式进行微小更改(请参阅本答案的结尾以了解此更改的必要性)。然后,您必须对定义方式进行重大更改Test
以下是更改:
(new Test())._('dsdf');
最初,您可以使用new运算符根据构造函数创建对象。稍后,在此对象上,您调用_
方法向其传递字符串'dsdf'
。
function Test(){
this._ = function( abc ){
console.log( abc );
}
}
(new Test())._('dsdf');
new Test()._('dsdf');

请注意上面代码段中使用的this
。当您使用new运算符调用Test
时,在将要创建的对象中,将定义一个名为_
的方法,该方法需要一个参数并将该参数输出到控制台。
为什么你必须改变Test的定义?
这是必需的,因为在Test
的初始定义中,其他人看不到名为_
的函数。它在Test
的范围内定义,只能通过Test
主体内的代码调用它。
可以省略次要更改,因为您可以通过运行代码段轻松注意。但是,在我个人看来,第一个代码更具可读性。此外,如果你已经分离了对象的创建和方法的调用,它将更具可读性,如下所示:
var test = new Test();
test._('dsdf');