用对象范围的变量封装对象中的函数和变量
Encapsulating functions and variables in an object with object-wide variables
所以,我想创建一个可以包含函数和变量的对象,以及包含函数和变数的对象,但我发现如果有"顶级"变量,由于作用域规则,更深层次的函数无法访问它们。例如:
var myobj = {
foo: "test",
bar: function() {
return this.foo;
},
baz: {
piz: "test2",
poz: function() {
return this.piz + this.foo;
}
}
}
console.log(myobj.bar());
console.log(myobj.baz.poz());
第二个调用返回"test2undefined",原因很明显-this.foo指的是baz.foo(未定义),而不是myobj。如何引用myobj以允许变量foo在该对象中的任何位置都可用?
您可以将poz()
修改为:
poz: function() {
return this.piz + myobj.foo;
}
this
不能引用两个对象。所以我只是使用myobj.foo
。
我想,当你在那个特定的行使用这个时,你想引用myobj
,所以为什么不使用对象的属性呢?
请注意,您可以通过在代码中的任何位置引用原始对象的名称来引用任何属性。
您可以将baz
更改为函数并记住当前上下文
var myobj = {
foo: "test",
bar: function() {
return this.foo;
},
baz:function() {
var me = this;
return {
piz: "test2",
poz: function() {
return this.piz + me.foo;
}
}
}
}
console.log(myobj.baz().poz());
您的错误是正常的。在您的poz
函数中,baz对象的this
引用。不是对myobj。
要更改poz函数,您应该在函数上传递上下文,如下所示:
var myobj = {
foo: "test",
bar: function() {
return this.foo;
},
baz: {
piz: "test2",
poz: function(ctx) {
return this.piz + ctx.foo;
}
}
}
console.log(myobj.baz.poz(myobj));
这不是一个好的解决方案,但在这种情况下,它更容易。
基本上,如果你想访问对象内部的一些属性,你应该使用var关键字来声明它。
我修改了一点你的例子:
function MyObj() {
var foo = "test";
this.bar = function() {
return foo;
};
this.baz = {
piz: "test2",
poz: function() {
return this.piz + foo;
}
}
}
myobj = new MyObj();
console.log(myobj.bar());
console.log(myobj.baz.poz());
相关文章:
- 替换另一个变量对象中的变量值
- 如何从表单变量对象中获取特定的from属性
- 变量/对象是否按值传递,为什么我不能在 javascript 中使用变量更改对象的属性
- 执行上下文和变量对象在 JavaScript 中实际上是一回事吗?
- 如何将变量对象传递到多个javascript弹出窗体
- 如何将javascript变量/对象从一个页面传递到另一个页面
- 在具有递增的变量/对象中存储和控制传单 GeoJSON 图层
- 在回调中重用变量/对象
- 给一个有1个变量/对象的函数给定几个参数
- 使用单词'英语'因为变量/对象名称在javascript中不起作用
- 如何访问变量对象中的数据
- 使用onclick调用变量对象中的函数
- 使用Underscore JS部分和for循环的未定义变量对象
- 如何查看我的变量对象
- 变量对象属性名称作为javascript中的参数
- 从变量对象中移除DOM元素,以便将其发布到服务器
- 根据变量对象是否等于“true”输出内容
- 如何连接(变量+对象键名)以获得点表示法的对象值
- 为什么在ES5中将变量对象改为词法环境
- 动态引用变量(对象)