javascript - 加班加到头晕了,为什么this拿不到私有属性了?
迷茫
迷茫 2017-04-11 12:12:05
[JavaScript讨论组]
/**
 * 测试return
 */
var obj = (function(){
    var name = "William";
    return {
        getName : function(){
            console.info(this.name);
        }
    }
})();

obj.getName();
  • 如代码所示,我就想把name封装起来,向外提供getName()公共方法,但输出的时候提示undefined

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(5)
阿神

我记得你之前问过一个相似内容的问题……
那个啥,我建议你先去补补基础知识,不要想当然的编程……

js的私有变量不是这样的,你得这样

var obj = (function(){
    var name = "William";
    return {
        getName : function(){
            console.info(name);
        }
    }
})();

obj.getName();
ringa_lee
var obj = (function() {
    var name = "William";
    return {
        getName: function() {
            console.info(this.name);
        }
    }
})();
//这样只是形成了一个闭包,但返回的对象没有name属性
//通过console.log(obj)也可以看出obj是没有name属性的
//改成
var obj = (function() {
    var name = "William";
    return {
        name: name,
        getName: function() {
            console.info(this.name);
        }
    }
})();
obj.getName();
//但我猜你其实是要一个私有变量,解决方法见上面。
阿神

这里你需要区分两个东西,一个是变量的作用域,一个是函数的上下文。变量的作用域在定义的时候就已经确定了,而函数的上下文也就是 this的指向在运行的时候才能够确定。 你这里把两者混为一谈了。也就是说this在运行时指向 obj对象,而obj对象并没有name属性

ringa_lee

额。。。。。name是变量不是属性

obj = (function(){
    var name = "william";
    obj = {
        getName:function() {return name;}
        setName;function(newName) { name = newName;}
    }
    return obj;
})();
obj.getName(); //"wiliam"
天蓬老师

对 你加班确实加太久了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号