关于javascript中的this对象

varname="全局";(function(){varname="匿名";Person=function(value){name="person";alert(this... var name = "全局";
(function(){
var name = "匿名";
Person = function(value){
name = "person";
alert(this instanceof Person); //true
alert(this.name); //undefined
}
Person.prototype.getName = function(){
alert(this.name); //undefined
return name;
}
Person.prototype.setName = function(value){
name = value;
}
})();

var person = new Person();
person.getName();

为什么两个 this.name 都是 undefined啊? this 在这里到底是指的哪一个作用域呢?
展开
 我来答
小河感n
2014-09-12 · TA获得超过460个赞
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:149万
展开全部
第一个this.name中的this是指向Person,Person并没有包含name变量
第二是指向getName ,
写法就错着了
还有你的那个name是匿名(自调用)函数的私有变量,匿名(自调用)函数体之外是不能访问的
追问
第一个 this 指向 Person 的话,Person 中不是声明了 name = "person"吗?
在函数中声明:
this.name 和 name 区别在哪里呢?
追答
name = "person" 是匿名(自调用)函数的私有变量,已经声明过了,name = "person" 这只是重新赋值
慕慕无敌帅0146
2014-09-12 · 超过68用户采纳过TA的回答
知道答主
回答量:132
采纳率:0%
帮助的人:132万
展开全部
onclick="change_pic(this)"

function change_pic(obj) {
// 这里的obj才是你想要的东西
alert(obj.src);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
facelessman1
2014-09-12 · 超过20用户采纳过TA的回答
知道答主
回答量:111
采纳率:0%
帮助的人:51.9万
展开全部
var name = "全局";
    (function(){
        var name = "匿名";
        Person = function(value){
            this.name = "person";//这里加this***************
            alert(this instanceof Person);    //true
            alert(this.name);    //'person'
            alert(name);//全局
        }
        Person.prototype.getName = function(){
            alert(this.name);    //person
            return name;    
        }
        Person.prototype.setName = function(value){
            name = value;
        }
    })();
    
    var person = new Person();
    person.getName();

这样就好了,你写错了,Person作为构造函数用,里面加上this

this其实还是挺复杂的,javascript里的this是 动态的,其实就是动态作用域。


具体参照这篇文章:http://yanhaijing.com/javascript/2013/12/28/demystifying-this-in-javascript/

追问
我知道在构造函数中加 this 就可以。我是想知道,在这个构造函数中的 this ,到底指向哪里。是 person 这个 Person()构造函数的实例吗?
追答
对是指向实例
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式