我想了解以下内容的区别以及括号的作用:
foo.bar.replace(a,b)
并且
(foo.bar).replace(a,b)
括号中的表达式是否需要在继续执行replace方法前先进行求值?我在维护的代码中看到了这种用法,想知道它的必要性是什么? 例如:
location.hash.replace(a,b)
并且
(location.hash).replace(a,b)
(5 + 3).toString()
- Gabriele PetriolitoFixed
方法之前需要加上括号进行计算。在我的例子中,foo.bar.replace(a,b)
中的foo.bar
需要被转换为字符串类型。那么,如果你使用一个临时变量将其赋值给某种类型的foo
,然后执行bar
方法,只要foo
是正确的类型,我是否不需要使用这个临时变量呢?例如:var foo = object.prop //prop 是字符串类型; foo.bar();
或者
var foo =object.prop //prop 是函数类型 foo().bar(); // = object.prop().bar()
- njorlsagafoo.bar.replace(a,b)
是一个属性而不是方法,所以你不能执行它。在你后面的例子中,将对象的方法分配给变量会改变其上下文。当你执行var foo = object.prop //prop is a function
时,foo()
是在 window 上下文中调用的,而不是在object
上下文中调用,这意味着如果原始的prop()
方法尝试通过this
访问object
的其他属性,则现在将无法找到它们。请参见以下示例:***http://jsfiddle.net/gaby/pSLax/***。 - Gabriele Petrioli