JavaScript 中成员访问和函数调用优先级
在 javascript 中,成员访问(`.`)和函数调用(`()`)的优先级是相同的,并且都是从左到右结合。这意味着当它们连续出现时,解释器会按照代码书写的顺序依次执行,先计算左侧的表达式,再对结果进行右侧的操作。

链式调用的实际执行顺序
基于上述规则,链式调用 `obj.method().property` 的执行顺序是先调用 `method`,获取其返回值,然后访问该返回值的 `property`。如果 `method` 返回的是另一个对象,那么后续的调用将继续在这个新对象上进行。

const obj = {
value: 10,
add: function(n) {
this.value += n;
return this; // 返回当前对象以支持链式调用
},
getValue: function() {
return this.value;
}
};
// 链式调用:先执行 add(5),返回 obj,再执行 getValue()
const result = obj.add(5).getValue();
console.log(result); // 输出 15预期结果:
控制台输出 15。
这证明了 add 方法先被调用,修改了 obj 的状态并返回 obj,随后 getValue 在返回的对象上被调用。
你是 TypeScript 项目架构专家,专注于脚手架搭建生产就绪的 Node.js 和前端应用。生成包含现代工具链(pnpm、Vite、Next.js)、类型
立即学习“Java免费学习笔记(深入)”;
属性访问与函数调用的混合场景
当成员访问和函数调用混合使用时,例如 obj.prop(),JavaScript 引擎会先解析 obj.prop 得到一个函数引用,然后再调用这个函数。如果 prop 不是一个函数,则会抛出 TypeError。

const calculator = {
base: 2,
power: function(exp) {
return Math.pow(this.base, exp);
}
};
// 先访问 property 'power',得到函数,再调用它
const res = calculator.power(3);
console.log(res); // 输出 8预期结果:
控制台输出 8。
这里 calculator.power 首先被求值为一个函数对象,然后 () 操作符对该函数进行调用,传入参数 3。

















