4、写出下面代码执行输出的结果
function C1(name) { // => name: undefined 没有给实例设置私有的属性name if (name) { this.name = name; } } function C2(name) { // => 给实例设置私有属性 name this.name = undefind this.name = name; } function C3(name) { // => 给实例设置私有属性 name this.name = undefind // 因为 name 的值为 undefined // 所以走 || 后面的代码 this.name = name || 'join'; } C1.prototype.name = 'Tom'; C2.prototype.name = 'Tom'; C3.prototype.name = 'Tom'; console.log((new C1().name) + (new C2().name) + (new C3().name)); // new C1().name // 没有传参 函数里面的 name 为 undefined // 实例里面没有 name 找原型上的 'Tom' // new C2().name // 没有传参 函数里面的的 name 为 undefined // 但是函数确实添加了 name 属性 只是值为 undefined 而已 // 所以找私有属性 name 的值为 undefined // new C3().name // 没有传参 函数里面的 name 为 undefined // 但是函数确实添加了 name 属性 只是值为 'join' // 所以私有属性 name 的值为 'join' // 最终结果为 'Tomundefinedjoin'