Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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_Function_Reflection - Fatal编程技术网

Javascript检查如何调用函数

Javascript检查如何调用函数,javascript,function,reflection,Javascript,Function,Reflection,有没有办法检查如何调用某个函数(并根据该函数更改输出) 我有一个对象,它应该有字符串“,”作为分隔符。当连接起来时,我如何重载toString函数,使其在两个字符串之间放置分隔符 例如,当“a”和“b”是我的对象时,警报(a+b)将调用它们的toString()函数。 现在我希望第一次调用应该看到调用方函数(加号)将连接我的对象的toString()并放置分隔符(例如:“,”)。 另一方面,第二次调用应该看到它是函数plus的第二个操作符,因此即使这个函数仍然连接我的对象,“b”。toStrin

有没有办法检查如何调用某个函数(并根据该函数更改输出)

我有一个对象,它应该有字符串“,”作为分隔符。当连接起来时,我如何重载toString函数,使其在两个字符串之间放置分隔符

例如,当“a”和“b”是我的对象时,警报(a+b)将调用它们的toString()函数。 现在我希望第一次调用应该看到调用方函数(加号)将连接我的对象的toString()并放置分隔符(例如:“,”)。 另一方面,第二次调用应该看到它是函数plus的第二个操作符,因此即使这个函数仍然连接我的对象,“b”。toString()是一个简单的toString()

如果a.toString()=“foo”和b.toString()=“bar”,我希望(a+b)将等于“foo.bar”,而不是“foo.bar”


有没有办法实现这种行为?

我自己也对漂亮的语法着迷

  // How wonderful, if this:
cursorPosition + playerPosition + targetPosition

  // Could output to something like this:
"(14:68), (22:56), (76:32)"
这是个好主意,但我认为不实用。最佳实践解决方案几乎同样简单:

display(cursorPosition, playerPosition, targetPosition)
"(14:68), (22:56), (76:32)"
重要的是,通过这种技术(定义一个显示函数),toString的行为是传统的——这意味着你不必担心逗号的东西会影响你对toString的传统使用:

console.log("Your location is " +playerPosition+ " and the target is " +targetPosition+" which is far away");
"Your location is (22:56) and the target is (76:32) which is far away"


我认为应该这样处理:
滥用
.toString()
并不是重载操作符的好方法,因为JavaScript不支持这一点。为什么不创建一个
.concat()
.add()
方法呢?您可以重载[].toString来实现这一点,但是“.toString无法分辨哪个var是哪个(右或左)我同意您的解决方案,其他人也说更好的解决方案是使用默认语法,一般情况下是这样的。但有时语法对于程序员来说很重要,因为“更好的”语法有助于提供更好的表达能力。出于这个原因,我想跟随这篇文章
function Position(x,y){  
  this.x = x ?x :0;
  this.y = y ?y :0;
}
Position.prototype.toString = function(){  return '(' +this.x+ ':' +this.y+ ')'  };

var pos1 = new Position(22,40);
var pos2 = new Position(18,24);
var pos3 = new Position(84,46);
var pos4 = new Position(32,64);

function display(){
  var tests = [];
  for (var i=0; i<arguments.length; i+=1) 
    tests.push( arguments[i].toString() );
  return tests.join(', ');
}

console.log(display( pos1, pos2, pos3, pos4 ));
(22:40), (18:24), (84:46), (32:64)