gpt4 book ai didi

javascript - 在命名空间函数中引用所需的对象

转载 作者:行者123 更新时间:2023-11-30 18:54:33 25 4
gpt4 key购买 nike

当我有命名空间函数时,我无法引用所需的对象。

这里没有问题:

obj.test = function() {
// this == obj
}

但是当我命名空间时我被绊倒了:

obj.namespace.test = function() {
// this == namespace
}

在后一个示例中,我知道 this 引用 namespace,但我想引用 obj。我该怎么做?

最佳答案

其他人提出了一些很好的建议。

我只是想补充一点,您还可以使命名空间成为一个函数,该函数将返回一个对象,该对象的变量指向 obj 以及您想要的任何成员函数。

例子:

    // Note that "namespace" is a reserved word in JS for some reason,
// so you can't use it as a variable/function/etc name.
var myNamespace = function myNamespace(){
var that = this;

var test = function test(){
//in here use this.that to point to obj
alert(this.that.name);
};

return {that: that, test: test};
};

// Then create the obj:
var obj = { name: "Mr. Ahb Jeckt", myNamespace: myNamespace};

// Then you can just call the "namespace" and member function like this:
obj.myNamespace().test();


//Or, "initialize" the namespace and call it like so:
obj.myNamespace = obj.myNamespace();
obj.myNamespace.test();

obj.name = "Mrs Ahb Jeckt";
obj.myNamespace.test();

这样在“命名空间”本身就没有对 obj 的硬编码引用,我认为它非常干净。

如果 obj 是一个“类”,这也有效;只需将 obj 设为构造函数而不是对象字面量:

// Then create the obj:
var obj = function (name){
this.name = name || "unnamed";
this.myNamespace = myNamespace;

// Initialize the namespace, we can leave this out and just reference
// obj.myNamespace() each time as well

this.myNamespace = this.myNamespace();
};

// Then you can just call the "namespace" and member function like this:

var myObj = new obj("Mr Ahb Jeckt");
myObj.myNamespace.test();

var myObj2 = new obj("Mrs Ahb Jeckt");
myObj2.myNamespace.test();

关于javascript - 在命名空间函数中引用所需的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2602317/

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