你如何从字面上解释这个对象
How Do You Explain This Object Literal?
我是Javascript Object Literal的新手,我无法理解这个逻辑背后的机制,因此,我不知道在Google或SO中搜索的正确关键字。
这是我的问题的一个例子:
var dialog = {
open: function(x){
console.log(JSON.stringify(x))
},
type: {
settings: {
controller: '',
click: false,
clas: ''
},
foo: function(){
this.settings.controller = 'Foo controller'
this.settings.clas = 'Foo class'
dialog.open(this.settings)
},
bar: function(){
this.settings.click = true
dialog.open(this.settings)
}
}
}
这是我的问题:
//A
dialog.type.foo();
//B
dialog.type.bar();
//C
dialog.type.foo();
为什么当我运行//C
时,dialog.type.settings
仍然保留foo
的值?如何默认恢复dialog.type.settings
?
您只有一个对象可以使用,因此您在前面的步骤中更改的任何内容都将"随身携带",直到您明确更改它们。
为了每次都使用新的对话框对象,我建议使用每次都返回一个新实例并隐藏settings
和open
属性的函数:
function dialog()
{
var settings = {
controller: '',
click: false,
clas: ''
},
open = function(x) {
console.log(JSON.stringify(x));
};
return {
type: {
foo: function() {
settings.controller = 'Foo controller';
settings.clas = 'Foo class';
open(settings);
},
bar: function() {
settings.click = true;
open(settings);
}
}
};
}
然后:
var a = dialog();
a.type.foo();
var b = dialog();
b.type.bar();
var c = dialog();
c.type.foo();
演示
它避免了在各种上下文中使用this
时可能遇到的问题,因为settings
和open
始终在您从dialog()
函数返回的 API 范围内。
您的"foo"函数显式和故意更改这些"设置"属性的值。毕竟,只有一个"设置"对象。如果要还原值,则必须编写一个函数来执行此操作。
相关文章:
- 对象.创建解释
- 解释主干对象和类创建模式
- 有人能解释一下;r'的对象在下面的代码示例中执行
- 你能用javascript解释对象和数组运算吗
- 对象创建源解释
- 谁能解释为什么我的日期函数通过 JS 日期对象给了我错误的转换
- 你能解释一下jQuery如何同时使用$作为函数和对象吗?
- Salesforce中的对象在Google Apps Script/Javascript中被解释为字符串
- 生成一个与Javascript字符串匹配的Regex对象.解释方法
- JSON数据的一部分被解释为对象,而类似的部分则被解释为数组:为什么
- 有人能解释一下sessionStorage对象的寿命吗
- javascript引擎解释对象文字时发生了什么
- 有人能向我解释函数.protype.call()和函数.protype=对象.create()吗
- 解释对象的形式追加到DOM
- 关于java脚本中对象文字的解释
- 解释表达式:对象后面跟着数组
- 解释嵌套javascript对象属性访问器字符串的最快方法是什么?
- Safari将来自xhr请求的对象解释为字符串而不是对象
- 有人能用对象解释奇怪的JavaScript吗
- 发送给客户端'被解释为JavaScript对象