将变量self而不是this添加到闭包中

add variable self instead of this to closure

本文关键字:添加 闭包 this 变量 self      更新时间:2023-09-26

我有一个这样的对象:

var obj = {
    name: "Tom",
    talk: function(){console.log( "my name is" + this.name )}
}

我想将this替换为其他值,例如self,这样无论我在哪里使用它,它都会指向我的对象。
我如何将self绑定到我的对象,以便获得这样的东西:

function(){console.log( "my name is" + self.name )}

而不是在每种方法的乞求下写入var self = this
我正在寻找一个函数,它强制变量self关闭我的对象的方法。这可能吗?怎么可能?

我不知道你为什么要这么做。如果您这样做了,那么使用IIFE声明变量self,在调用对象的init方法将self初始化为this之后返回该对象。

function create_obj_using_self() {
  return function() {
    var self;
    return {
      init: function() { return self = this; },
      name: "Tom",
      talk: function(){console.log( "my name is" + self.name )}
    }.init();
  }();
}

或者,

var obj = (function(){
    var obj = {
        name: "Tom",
        talk: function(){console.log( "my name is" + obj.name )}
    };
    return obj;
})();

你能试试这样的吗

var obj = {
    name: "Tom",
    talk(){console.log( "my name is " + this.name )}
}
obj.talk( ); //prints Tom
obj.name = "Harry";
obj.talk( ); //prints Harry

window.self=obj。我认为这将适用于