gpt4 book ai didi

javascript - 在javascript中内部对象文字之间使用函数

转载 作者:行者123 更新时间:2023-11-29 10:37:28 24 4
gpt4 key购买 nike

我的问题是我的 js 类中有 2 个内部对象,我试图在我的另一个对象中使用这些对象之一的方法(下面是我尝试做的示例)。我明白为什么这因为范围而不起作用。我只是想知道是否有办法让它发挥作用。

var Class1 = {

self : this,
Obj1 : {

Obj1Method : function () {
alert("Do something");
},
Obj1Method2 : function () {
alert("Do something else");
},

InnerObj1 : {
InnerNestObj1Method : function (val) {
alert(val + 2);
}
}
},

Class1Method2 : function () {
this.Obj1.Obj1Method2();
},

Obj2 : {

Obj2Method : function (val2) {
self.Obj1.InnerObj1.InnerNestObj1Method(val2);
},

Obj2Method2 : function () {
self.Class1Method2();
}
}
};

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //No bueno
Class1.Obj2.Obj2Method(5); //No bueno

最佳答案

您可以通过将 self 替换为 Class1 来修复您的示例。self : this, 行将 Class1.self 设置为指向全局对象(评估该行时为 this )。

var Class1 = {

self : this,
Obj1 : {

Obj1Method : function () {
alert("Do something");
},
Obj1Method2 : function () {
alert("Do something else");
},

InnerObj1 : {
InnerNestObj1Method : function (val) {
alert(val + 2);
}
}
},

Class1Method2 : function () {
this.Obj1.Obj1Method2();
},

Obj2 : {

Obj2Method : function (val2) {
Class1.Obj1.InnerObj1.InnerNestObj1Method(val2);
},

Obj2Method2 : function () {
Class1.Class1Method2();
}
}
};

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //bueno
Class1.Obj2.Obj2Method(5); //bueno

当你执行 self: this 时会发生什么

// If this is running in non strict mode, from the global scope, `this` points
// To the global object because there was no function call setting `this`
var Class1 = {
self : this,
};

您需要了解的是,this 是由使用this 调用该函数的任何人设置的。在上面的示例中,没有调用者,因此运行时将 this 设置为指向全局对象。

以下是如何使您的对象更可重用并为您自己提供对外部对象的引用:

function createClass() {
var self = {
Obj1: {

Obj1Method: function() {
alert("Do something");
},
Obj1Method2: function() {
alert("Do something else");
},

InnerObj1: {
InnerNestObj1Method: function(val) {
alert(val + 2);
}
}
},

Class1Method2: function() {
self.Obj1.Obj1Method2();
},

Obj2: {

Obj2Method: function(val2) {
self.Obj1.InnerObj1.InnerNestObj1Method(val2);
},

Obj2Method2: function() {
self.Class1Method2();
}
}
};
return self;
}

var Class1 = createClass();

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //works
Class1.Obj2.Obj2Method(5); //works

关于javascript - 在javascript中内部对象文字之间使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com