function Fun() {
this.name = "mary";
this.sec = function () {
console.log("sec");
}
}
function CopyFun() {
// Fun.call(this);
this.fun = Fun;
this.fun();
}
var fun = new CopyFun();
fun.sec(); // sec
console.log(fun.name); // mary
console.log(fun.hasOwnProperty("sec")); // true
为什么CopyFun中this.fun()方法执行就可以创建属性?
我是这样理解的:
this.fun = function(){
this.name = "mary";
this.sec = function () {
console.log("sec");
}
}
当执行 this.fun() 这一步时应该是一个正常函数的调用,由于没有返回值所以应该返回undefined。
但实际情况是,它相当于执行了Fun.call(this),创建的属性name和sec,这一点不能理解,望哪位大神给解释一下,谢谢!!!。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
其实你加个console.log看看this就知道了。
this.fun()的确没有返回值(怎么理解这个正常函数调用呢?这里我认为是在调用实例的fun方法了,所以fun方法里面的this指向的是实例),但它执行体里 this指向的就是CopyFun的实例,那么this.name等就是在给实例赋值成员了。this.fun()这句语句里面this即实例fun对象,调用了Fun函数,因此,此时Fun函数里的this也是实例fun对象。所以产生了和执行Fun构造函数类似的效果。在构造函数的返回问题上,题主有2个认识上的误区:
this.fun()确实返回undefined,然而没有变量或语句去接收返回值,这个返回值相当于被抛弃了。另外在执行
new操作的时候,如果没有显示指定一个return ,或者return的不是引用类型的数据,会默认返回this,即该构造函数创建出来的实例对象。