Javascript对象如何本身引用值?[重复]

2020/10/22 23:22 · javascript ·  · 0评论

可以说我有以下javascript:

var obj = {
 key1 : "it ",
 key2 : key1 + " works!"
};
alert(obj.key2);

此错误与“未定义key1”。我努力了

this.key1
this[key1]
obj.key1
obj[key1]
this["key1"]
obj["key1"]

而且它们似乎从未定义过。

如何获得key2来引用key1的值?

也许您可以考虑删除函数的属性。我的意思是这样的:

var obj = {
  key1: "it ",
  key2: function() {
    return this.key1 + " works!";
  }
};

alert(obj.key2());

这可以通过使用构造函数而不是文字来实现

var o = new function() {
  this.foo = "it";
  this.bar = this.foo + " works"
}

alert(o.bar)

在初始化对象之前,不能引用该对象的属性。使用外部变量。

var key1 = "it";
var obj = {
  key1 : key1,
  key2 : key1 + " works!"
};

另外,这不是“ JSON对象”;它是一个Javascript对象。JSON是一种使用字符串表示对象的方法(碰巧是有效的Javascript代码)。

一种替代方法是使用getter / setter方法。

例如,如果您只关心读取计算值:

var book  = {}

Object.defineProperties(book,{
    key1: { value: "it", enumerable: true },
    key2: {
        enumerable: true,
        get: function(){
            return this.key1 + " works!";
        }
    }
});

console.log(book.key2); //prints "it works!"

但是,上面的代码不允许您为key2定义另一个值。

因此,如果您还想重新定义key2的值,事情会变得有些复杂。它始终是一个计算值。这很可能就是您想要的。

但是,如果您希望能够重新定义key2的值,则将需要一个位置来独立于计算来缓存其值。

有点像这样:

var book  = { _key2: " works!" }

Object.defineProperties(book,{
    key1: { value: "it", enumerable: true},
    _key2: { enumerable: false},
    key2: {
        enumerable: true,
        get: function(){
            return this.key1 + this._key2;
        },
        set: function(newValue){
            this._key2 = newValue;
        }
    }
});

console.log(book.key2); //it works!

book.key2 = " doesn't work!";
console.log(book.key2); //it doesn't work!

for(var key in book){
    //prints both key1 and key2, but not _key2
    console.log(key + ":" + book[key]); 
}

另一个有趣的选择是使用自初始化对象:

var obj = ({
  x: "it",
  init: function(){
    this.y = this.x + " works!";
    return this;
  }
}).init();

console.log(obj.y); //it works!

由于定义的语句obj尚未完成,因此key1尚不存在。考虑以下解决方案:

var obj = { key1: "it" };
obj.key2 = obj.key1 + ' ' + 'works!';
// obj.key2 is now 'it works!'

这不是JSON对象,而是通过对象文字符号创建的Javascript对象。(JSON是用于数据交换文本符号(更多)。如果您要处理JavaScript源代码,而不要处理字符串,则不涉及JSON。)

在对象初始化程序中无法引用正在初始化的对象的另一个键,因为在初始化程序完成之前,无法获得对正在创建的对象的引用。this此情况没有类似类似的关键字。)

obj一旦进入函数内部,也可以引用而不是this

var obj = {
    key1: "it",
    key2: function(){return obj.key1 + " works!"}
};
alert(obj.key2());

这不是JSONJSON的设计非常简单;允许任意表达式并不简单。

在完整的JavaScript中,我认为您不能直接执行此操作。thisobj完全构造被调用的对象之前,您无法引用因此,您需要一个变通办法,那就是有人拥有比我提供的更多的JavaScript-fu。

本文地址:http://javascript.askforanswer.com/javascriptduixiangruhebenshenyinyongzhizhongfu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!