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

javascript:将方法和字符串分配给相同的属性名,javascript,methods,properties,Javascript,Methods,Properties,我知道我会让那些人说我不应该这么做,但我很好奇人们是如何做到的 我知道我见过在哪里可以键入属性的名称并获得一个值,但是在最后添加括号,它就会访问一个方法 从视觉上看,我是这样说的: foo returns 'bar' foo() performs a function 问题是如何解决?这是不可能的,因为对象上的属性是如何解析的。这是唯一一件离我们很近的事情: 函数f(){ return“我正在从函数返回”; } f、 toString=函数(){ 返回“我是变量的一个属性”; } log('

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

我知道我见过在哪里可以键入属性的名称并获得一个值,但是在最后添加括号,它就会访问一个方法

从视觉上看,我是这样说的:

foo returns 'bar'
foo() performs a function

问题是如何解决?这是不可能的,因为对象上的属性是如何解析的。这是唯一一件离我们很近的事情:

函数f(){
return“我正在从函数返回”;
}
f、 toString=函数(){
返回“我是变量的一个属性”;
}
log('f()表示:'+f());
console.log('f表示:'+f)没有,但是有点。。。
这可以通过
valueOf

var foo=function(){
console.log(“来自函数”);
返回“函数”;
};
foo.valueOf=函数(){
返回“变量”;
};
警报('输出为:'+foo())

警报('Output is:'+foo)
注意,利用
setTimeout的解决方法

var foo=(函数(){
var fn=函数(){
返回foo&&typeof foo==“string”?函数(){
返回“foobar”
}:“酒吧”;
};
setTimeout(函数(){
foo=fn()
});
返回fn()
}());
console.log(foo);//`“酒吧”`
setTimeout(函数(){
console.log(foo());/`“foobar”`

});你在哪里看到的?(也许你把它与向函数添加属性混淆了,这使人们能够编写
fn()
fn.prop1
)我一直在努力记住。这些年来我已经看过几次了,现在我想弄清楚,我记不起来了@多尔特,你可能是对的。但是为什么你能做到这一点,而不是这一点呢?这只能在答案中所示的特殊情况下使用
valueOf()
toString()
,这不能以通用的方式完成。@thecodeparadox任何时候,它都是用数字/字符串铸造的,或者是任何它仍然能咬住的东西valueOf@thecodeparadox如上所述,由于JavaScript原型继承的性质,这是可能的。当您尝试将某个对象转换为基元类型时,会调用多个函数,其中一个是valueOf()@vihan,因此属性可以是函数和对象,但不能是函数和字符串?@AdamCook是的,这是因为JavaScript中的所有内容都是对象。所以你可以向任何东西添加属性。“所以你可以向任何东西添加属性”-不,你不能。尝试
var x=1;x、 newProp=“某物”
然后检查
x.newProp
的值。并非JavaScript中的所有内容都是对象。但是所有的功能都是相同的。