Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用没有括号的对象函数时,它如何显示自定义消息而不是返回整个函数?_Javascript_Javascript Objects - Fatal编程技术网

Javascript 调用没有括号的对象函数时,它如何显示自定义消息而不是返回整个函数?

Javascript 调用没有括号的对象函数时,它如何显示自定义消息而不是返回整个函数?,javascript,javascript-objects,Javascript,Javascript Objects,我正在创建一个名为Javascript-X的独特设计的Javascript API。我没有使用传统的方法来创建API,而是使用对象树在单个变量内创建整个API 这看起来很好,“$jx.ex()”返回“Hello World”,但是如果键入“$jx.ex”,它将返回整个函数。运行代码段以查看 问题是,您能否自定义键入“$jx.ex”时显示的消息 $jx={ 例:函数(){ return(‘你好,世界’) } }; log($jx.ex()); console.log($jx.ex.toStrin

我正在创建一个名为Javascript-X的独特设计的Javascript API。我没有使用传统的方法来创建API,而是使用对象树在单个变量内创建整个API

这看起来很好,“$jx.ex()”返回“Hello World”,但是如果键入“$jx.ex”,它将返回整个函数。运行代码段以查看

问题是,您能否自定义键入“$jx.ex”时显示的消息

$jx={
例:函数(){
return(‘你好,世界’)
}
};
log($jx.ex());
console.log($jx.ex.toString())
调用没有括号的对象函数时,它如何显示自定义消息而不是返回整个函数

当引用不带括号的对象函数时,除非使用
new
,否则不是调用它,而是引用它。例如:

// There are no function calls here
var x = $jx.ex;
如果API的用户执行上述操作,
x
将是对函数的引用,而不是字符串

问题是,您能否自定义键入“$jx.ex”时显示的消息

如果您在控制台中执行此操作并看到整个功能,可能是控制台强制使用字符串(调用
toString
),也可能是控制台在较低级别执行了某些操作。如果是前者,我们可以通过给函数一个新的
toString
来覆盖它:

$jx={
例:函数(){
return(‘你好,世界’)
}
};
$jx.ex.toString=function(){
return“这是自定义的‘消息’”;
};
console.log($jx.ex());//电话
console.log($jx.ex);//不是一个电话,结果会很好
//不同的控制台
console.log($jx.ex.toString());//直接串
console.log(字符串($jx.ex));//t间接串入
调用没有括号的对象函数时,它如何显示自定义消息而不是返回整个函数

当引用不带括号的对象函数时,除非使用
new
,否则不是调用它,而是引用它。例如:

// There are no function calls here
var x = $jx.ex;
如果API的用户执行上述操作,
x
将是对函数的引用,而不是字符串

问题是,您能否自定义键入“$jx.ex”时显示的消息

如果您在控制台中执行此操作并看到整个功能,可能是控制台强制使用字符串(调用
toString
),也可能是控制台在较低级别执行了某些操作。如果是前者,我们可以通过给函数一个新的
toString
来覆盖它:

$jx={
例:函数(){
return(‘你好,世界’)
}
};
$jx.ex.toString=function(){
return“这是自定义的‘消息’”;
};
console.log($jx.ex());//电话
console.log($jx.ex);//不是一个电话,结果会很好
//不同的控制台
console.log($jx.ex.toString());//直接串

console.log(字符串($jx.ex));//t间接串入
考虑以下示例:

function Multiply(operator, operand) {
    return operator * operand;
}

This could equally be written:

Multiply = function(operator, operand) {
    return operator * operand;
}
虽然在第一个示例中,其含义可能并不明显,但第二个示例更清楚地表明,我们正在为一个名为Multiply的变量分配一个具有2个参数的函数,而函数作为赋值的概念在整个javascript中都很常见。这是函数是“一等公民”这一事实的一个小例子,也就是说,它们可以像传递值一样被传递

现在我们来谈谈任务的不同:

var operator = 3;
var operand = 4;
var ret = Multiply(operator, operand);
在定义ret变量时,执行乘法运算并分配返回值-ret等于12

让我们用另一种方式再试一次:

var operator = 3;
var operand = 4;
var ret = Multiply;
现在,在定义ret时,ret变成了乘法函数,而不是从乘法函数中得到的结果。调用ret()将执行乘法函数,您可以像调用乘法(运算符、操作数)一样调用它:

var out = Multiply(3, 4);

考虑以下示例:

function Multiply(operator, operand) {
    return operator * operand;
}

This could equally be written:

Multiply = function(operator, operand) {
    return operator * operand;
}
虽然在第一个示例中,其含义可能并不明显,但第二个示例更清楚地表明,我们正在为一个名为Multiply的变量分配一个具有2个参数的函数,而函数作为赋值的概念在整个javascript中都很常见。这是函数是“一等公民”这一事实的一个小例子,也就是说,它们可以像传递值一样被传递

现在我们来谈谈任务的不同:

var operator = 3;
var operand = 4;
var ret = Multiply(operator, operand);
在定义ret变量时,执行乘法运算并分配返回值-ret等于12

让我们用另一种方式再试一次:

var operator = 3;
var operand = 4;
var ret = Multiply;
现在,在定义ret时,ret变成了乘法函数,而不是从乘法函数中得到的结果。调用ret()将执行乘法函数,您可以像调用乘法(运算符、操作数)一样调用它:

var out = Multiply(3, 4);

不可以。如果您调用
.ex
而不是
.ex()
,则您要求的是函数引用,而不是函数调用,这就是您得到的结果。
.ex
返回字符串的唯一方法是如果它是一个以字符串为其值的属性,而不是指向函数的指针。我用您的编辑修改了这个问题。否。如果调用
.ex
而不是
.ex()。返回字符串的唯一方法是字符串是字符串值为的属性,而不是函数的指针。我用编辑修改了问题。您是一个救生员。如果你不介意我问的话,你能加上m吗