var name="window"; var obj={ name:'obj', children:{ name:'children', logName:function(){ alert(this.name) } } } var logName=obj.children.logName; logName();
问:
1.alert什么?
答:window。
2.修改obj的实现,怎么能alert:children
试着解答
var name="window"; var obj={ name:'obj', children:{ name:'children', logName :(function(scope){//改了这里,弄了个闭包加进去了个作用域 return function(){ alert(scope.name) } })(obj.children) } } var logName=obj.children.logName; logName();
这样会报错
var name="window";
var obj={};//改了这里,把obj先定义了 obj={ name:'obj', children:{ name:'children', logName :(function(scope){ return function(){ alert(scope.name) } })(obj.children) } } var logName=obj.children.logName; logName();
改成了这样,但是会报错
感觉貌似是因为对象还没定义完???
反正后来我改成这样好使了
var name="window"; var obj={ name:'obj', children:{ name:'children' } } obj.children.logName=(function(scope){//改了这里,把那个作用域在定义完再传进去 return function(){ alert(scope.name) } })(obj.children) var logName=obj.children.logName; logName();
再加一个
function child(){ this.name='children'; this.logName=(function(self){ return function(){ console.log(self.name) } })(this); } var logName=new child().logName; logName();
传this就不会出现没有定义完的问题