关于创建面向对象的使用的疑问(涉及函数里面的作用域问题)?

  function createPerson(name){
        
        //1.原料
        var obj = new Object();
        //2.加工
        obj.name = name;
        obj.showName = function(){
            alert( this.name );
        };
        //3.出场
        return obj;
        
    }
    
    createPerson('小明').showName();

// createPerson('小明').showName(); 在调用了createPerson函数之后返回了obj,但是这个obj的位置是在全局的,形成的obj.showName()怎么能够调用到createPerson这个函数作用域里的showName的?

阅读 2.1k
2 个回答

你的目的是什么?谁调用function,function里的this就指向谁,除非用bin,apply,call去改变。

this指向调用的那个对象

var obj = {};
obj.name = "小明"
obj.showName = function(){
    alert( this.name );//这里是obj.xxxx 所以this是obj
};
obj.showName()//这里输出的是 小明 

createPerson('小明').showName();//其实还是相当于obj.showName();调用的是obj所以指向的是obj

简单的说 
obj.showName()//this指向obj
showName()//相当于 window.showName() 所以this执行window;
一个事件:button.onclick= function(){} //这里this就是button
xxx.function(){}  方法里的this就是xxx
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题