Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript OO如何使用一些JSON变量更新self参数_Javascript_Json - Fatal编程技术网

javascript OO如何使用一些JSON变量更新self参数

javascript OO如何使用一些JSON变量更新self参数,javascript,json,Javascript,Json,假设我有一个javascript对象,包含以下内容 var Settings = function () { this.timelimit = 0; this.locked = false; this.expires = null; this.age = null; }; 然后我设置了一些get/set函数,如: Settings.prototype = { getAllA

假设我有一个javascript对象,包含以下内容

var Settings = function () {        
    this.timelimit = 0;
    this.locked    = false;     
    this.expires   = null;      
    this.age       = null;      
};
然后我设置了一些get/set函数,如:

Settings.prototype = {

        getAllAges: function () {
            return self.age;
        },

        getTimeLimit: function () {
            return self.timelimit;
        },
        load: function() {
           data_from_local_storage = LoadLocalStorage();
        }
 }
data\u from\u local\u storage
中,我有与上述变量匹配的JSON变量(
timelimit
locked
等)

问题是,对象
var settings\u ref=settings()
具有所有这4个变量,但也在
settings\u ref
中分配了这3个函数,由于此OO行为,我需要在
load()函数中写入:

this.timelimit = data_from_local_storage.timelimit
this.age       = data_from_local_storage.age
this.locked    = data_from_local_storage.locked
因为如果我写
this=local\u存储中的数据
它将销毁我的对象

那么,我如何避免逐个编写所有这些变量呢

  • 函数内部不存在循环
  • 在这个例子中,只有4个,但还有更多,我不能每次都写
  • 我正在寻找一些类似Python之类的
    .update()
    函数

有人知道的快捷方式吗?

您可以在ES2015中使用
Object.assign()

    load: function() {
       Object.assign(this, LoadLocalStorage());
    }
IE中显然还不支持它,但有一个polyfill:

if(type of Object.assign!=“function”){
(功能(){
Object.assign=函数(目标){
"严格使用",;
//我们必须对照这些具体情况进行检查。
如果(目标==未定义| |目标===空){
抛出新的TypeError('无法将未定义或null转换为对象');
}
var输出=对象(目标);
for(var index=1;index
(就我个人而言,我会使用
Object.defineProperty()
添加该方法,但这是MDN中的逐字逐句。)


(尽管我猜如果您没有
Object.assign()
,您可能没有
Object.defineProperty()
或:)

您可以在ES2015中使用
Object.assign()

    load: function() {
       Object.assign(this, LoadLocalStorage());
    }
IE中显然还不支持它,但有一个polyfill:

if(type of Object.assign!=“function”){
(功能(){
Object.assign=函数(目标){
"严格使用",;
//我们必须对照这些具体情况进行检查。
如果(目标==未定义| |目标===空){
抛出新的TypeError('无法将未定义或null转换为对象');
}
var输出=对象(目标);
for(var index=1;index
(就我个人而言,我会使用
Object.defineProperty()
添加该方法,但这是MDN中的逐字逐句。)


(尽管我猜是编辑,如果你没有
Object.assign()
你可能也没有
Object.defineProperty()
对象:)

如果你将数据存储在另一个对象文本中,那么将数据持久化到本地存储并返回就容易多了。。下面是一个例子

//假装本地存储加载程序
函数LoadLocalStorage(){
返回{
时限:100,
是的,
过期日期:新日期(),
年龄:40
}
}
变量设置=函数(){
此参数。数据={
时限:0,
锁定:错误,
过期日期:null,
年龄:零
}
};
Settings.prototype={
getAllAges:函数(){
返回此.data.age;
},
getTimeLimit:函数(){
返回此.data.timelimit;
},
加载:函数(){
this.data=LoadLocalStorage();
}
}
var设置=新设置;
console.log(“装载前的年龄”);
console.log(settings.getAllAges());
settings.load();
console.log(“加载后的年龄”);

console.log(settings.getAllAges())如果将数据存储在另一个对象文本中,则将数据持久化到本地存储并返回会更容易。。下面是一个例子

//假装本地存储加载程序
函数LoadLocalStorage(){
返回{
时限:100,
是的,
过期日期:新日期(),
年龄:40
}
}
变量设置=函数(){
此参数。数据={
时限:0,
锁定:错误,
过期日期:null,
年龄:零
}
};
Settings.prototype={
getAllAges:函数(){
返回此.data.age;
},
getTimeLimit:函数(){
返回此.data.timelimit;
},
加载:函数(){
this.data=LoadLocalStorage();
}
}
var设置=新设置;
console.log(“装载前的年龄”);
console.log(settings.getAllAges());
settings.load();
console.log(“加载后的年龄”);

console.log(settings.getAllAges())那些对
self
的引用应该是
this
。可能有助于将所有选项放置在另一个对象文本中,例如,
this.options={timelimit:0,…}
,然后您可以通过执行
this.options=data\u from\u local\u storage
,非常简单地替换这些选项。。这当然会使将选项放入本地存储变得同样容易:)@很抱歉,我写了一个快速的代码,但我通常写
var self=this
,这样它就不会在其他函数中被混淆。
self
的那些引用应该是
this
。可能有助于将所有选项放置在另一个对象文本中,例如,
this.options={timelimit:0,…}
,然后您可以通过执行
this.options=data\u from\u local\u storage
,非常简单地替换这些选项。。这当然会使将选项放入本地存储变得同样容易:)@很抱歉我写了一封信