如何在对象的函数中访问该对象的属性?附尝试代码
问题分析与解决方案
咱们先拆解你遇到的两个核心问题,再给出针对性的解决办法:
1. 为什么this.Conf返回undefined?
这是函数调用上下文的问题——this的指向完全取决于函数被调用的方式,而非定义位置。如果你的someFunc不是通过ui_conf.someFunc()这种方式调用的,this就不会指向ui_conf对象,自然拿不到this.Conf。
举个典型错误场景:把someFunc作为回调传给setTimeout这类函数时,this会默认指向window(非严格模式)或undefined(严格模式):
// 错误调用示例 setTimeout(ui_conf.someFunc, 1000); // 此时this指向window,所以this.Conf是undefined
2. 为什么window.ui_conf返回undefined?
这大概率是作用域或声明时机的问题:
- 如果
var ui_conf是在函数内部声明的,它属于局部变量,不会挂载到window对象上; - 如果是全局作用域,但你在变量声明完成前就调用
window.ui_conf,因var的变量提升特性,此时ui_conf的值是undefined; - 若用
let/const声明变量,哪怕在全局作用域,也不会挂载到window上,所以window.ui_conf同样无法访问。
具体解决方案
方案1:确保正确的直接调用方式
如果是直接调用函数,必须通过对象本身触发,这样this才会指向ui_conf:
var ui_conf = { Conf: { "a": "b", "c": "d", "f": {} }, someFunc: function(paramx, paramy) { console.log(this.Conf); // 现在能正常输出{ "a": "b", "c": "d", "f": {} } } }; // 正确调用姿势 ui_conf.someFunc();
方案2:处理回调场景下的this指向
如果函数需要作为回调使用,有3种常用方法固定this:
方法A:用箭头函数包裹调用
箭头函数不会绑定自己的this,会继承外层上下文的this:
// 作为setTimeout回调的正确写法 setTimeout(() => ui_conf.someFunc(), 1000);
方法B:在函数内部保存this引用
在函数开头把当前对象的this存到变量(比如self/that),后续用这个变量访问属性:
var ui_conf = { Conf: { "a": "b", "c": "d", "f": {} }, someFunc: function(paramx, paramy) { const self = this; // 保存当前对象的引用 // 异步回调中使用 setTimeout(function() { console.log(self.Conf); // 正常访问属性 }, 1000); } };
方法C:用bind()绑定this
通过bind()方法把函数的this永久绑定到ui_conf对象:
// 绑定后再作为回调传递 setTimeout(ui_conf.someFunc.bind(ui_conf), 1000);
方案3:让window.ui_conf可访问(若需全局访问)
如果你确实需要通过window.ui_conf访问对象,要确保:
- 在全局作用域声明变量,且用
var或直接挂载到window:
// 方式1:全局var声明 var ui_conf = { /* 你的对象内容 */ }; // 方式2:直接挂载到window对象 window.ui_conf = { /* 你的对象内容 */ };
- 变量声明必须在调用之前,避免变量提升导致的
undefined问题。
内容的提问来源于stack exchange,提问作者Itsik Mauyhas
相关产品推荐
相关产品推荐

