var say="i am window";
function Speak(){
this.say="i am function";
return func=()=>{
console.log(this.say);
return this.say;
}
}
var obj=new Speak();
var str=obj();//i am function
console.log(obj.say);//undefined
console.log(str);//i am function
例子如上,以箭头函数作为返回函数只能保证this指向的是Speak函数,但是obj直接引用say属性得到的undefined,只能通过新声明另一个变量接受参数。
是不是所有闭包函数内的属性都不能被外部对象直接访问?为什么?是因为闭包的特殊性使得this指针丢失了每个属性对应的地址?
请各位大佬帮忙解答下,谢谢!
用new 调用的构造函数会自动创建一个实例对象,并让构造函数内的this指向这个实例对象。在实例对象执行后会自动将这个实例对象做为返回值返回。
所以构造函数一般不应该用return 来返回值。
而你这个构造函数Speak用return 来返回值。并且返回值是一个对象(函数也是对象)则会用这个对象代替自动创建的实例对象返回给obj。
也就是说你设置的是实例对象的say,返回给obj的却是一个箭头函数,箭头函数没有say属性。
你是不是想设置func为实例对象的方法,应该是
var say="i am window";
function Speak(){
this.say="i am function";
this.func=()=>{
return this.say;
}
}
var obj=new Speak();
console.log(obj.say);
console.log(obj.func());
https://wenku.baidu.com/view/fefb14e9b8f67c1cfad6b814.html这里有个文章链接,你可以参考一下。