javascript - 为什么CopyFun构造函数通过new 可以继承来自Fun的属性?
本文介绍了javascript - 为什么CopyFun构造函数通过new 可以继承来自Fun的属性?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
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,这一点不能理解,望哪位大神给解释一下,谢谢!!!。
解决方案
其实你加个console.log看看this就知道了。
function Fun() {
console.log(this);
this.name = "mary";
this.sec = function () {
console.log("sec");
}
}
this.fun()
的确没有返回值(怎么理解这个正常函数调用呢?这里我认为是在调用实例的fun方法了,所以fun方法里面的this指向的是实例),但它执行体里 this指向的就是CopyFun的实例,那么this.name
等就是在给实例赋值成员了。
这篇关于javascript - 为什么CopyFun构造函数通过new 可以继承来自Fun的属性?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文