假设您已定义此函数:
function greet() {
console.log('hello');
}
new greet; // parentheses are optional in this construct.
从MDN的new
oprator:
new constructor[([arguments])]
toString
并且valueOf
是特殊的方法:在需要进行转换时会隐式调用它们:
var obj = {
toString: function() {
return 'hello';
}
}
'' + obj; // concatenation forces cast to string and call to toString.
您可以(ab)使用此模式调用greet
而不带括号:
'' + { toString: greet };
或搭配valueOf
:
+{ valueOf: greet };
valueOf
并且toString
实际上是从@@ toPrimitive方法调用的(自ES6起),因此您也可以实现该 方法:
+{ [Symbol.toPrimitive]: greet }
"" + { [Symbol.toPrimitive]: greet }