javascript:将方法和字符串分配给相同的属性名称

时间:2015-08-29 22:46:46

标签: javascript methods properties

我知道我会找那些说我不应该这样做的人,但我很好奇人们是如何做到的。

我知道我已经看到你可以在哪里输入一个属性的名称并获得一个值,但是然后你将括号添加到最后并访问一个方法。

在视觉上,我这样说:

foo returns 'bar'
foo() performs a function

问题是如何?

3 个答案:

答案 0 :(得分:2)

由于如何在对象上解析属性,这是不可能的。这是唯一远近关闭的事情:



function f() {
  return 'I am being returned from the function.';
}

f.toString = function () {
  return 'I am a property on the variable.';
}

console.log('f() says: ' + f());
console.log('f says: ' + f);




它依赖于JS在某些情况下通过.toString方法进行类型转换的事实。

答案 1 :(得分:0)

不,但有点......

可以使用valueOf

完成种类

var foo = function() {
  console.log("From Function");
  return "Function";
};

foo.valueOf = function() {
  return "Variable";
};

alert( 'Output is: ' + foo() )
alert( 'Output is: ' + foo   )

使用JavaScript无法做到这一点,因为对象中的项目可以是两个不同的对象。

  

如果你想要一个属性作为一个函数和一个对象,那就不一样了

答案 2 :(得分:0)

注意,使用setTimeout

进行解决方法



var foo = (function() {
  var fn = function() {
    return foo && typeof foo === "string" ? function() {
      return "foobar"
    } : "bar";
  };
  setTimeout(function() {
    foo = fn()
  });
  return fn()
}());

console.log(foo); // `"bar"`

setTimeout(function() {
  console.log(foo()); // `"foobar"`
});