Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.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-将变量self而不是此变量添加到闭包中_Javascript - Fatal编程技术网

javascript-将变量self而不是此变量添加到闭包中

javascript-将变量self而不是此变量添加到闭包中,javascript,Javascript,我有一个这样的物体: var obj = { name: "Tom", talk: function(){console.log( "my name is" + this.name )} } 我想用一些其他值替换这个,例如self,这样无论我在哪里使用它,它都会指向我的对象。 我如何将self绑定到我的对象,以获得如下内容: function(){console.log( "my name is" + self.name )} 没有在每种方法的乞求下写下var self=th

我有一个这样的物体:

var obj = {
    name: "Tom",
    talk: function(){console.log( "my name is" + this.name )}
}
我想用一些其他值替换这个,例如self,这样无论我在哪里使用它,它都会指向我的对象。
我如何将self绑定到我的对象,以获得如下内容:

function(){console.log( "my name is" + self.name )}
没有在每种方法的乞求下写下
var self=this

我正在寻找一个函数,它强制变量self关闭我的对象的方法。
有可能吗?怎么可能

window.self=obj。我想这样行

你能试试这样的吗

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

obj.talk( ); //prints Tom
obj.name = "Harry";
obj.talk( ); //prints Harry

我不知道你为什么要这么做。如果这样做,则使用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;
})();

是的,但只有当我在windowWindow中只有一个对象是全局对象时,这才有效。不应该不必要地违反它。@dbw有许多对象需要我们在每个对象上强制自己。你想实现什么?请提供您想要使用的代码示例。你说的“我的目标”是什么意思?另外,您的代码有语法错误,
name
属性后缺少逗号。这根本不起作用<代码>此将是窗口。此外,您还有一个输入错误,
self
后面有一个分号而不是逗号,
name
后面没有逗号。为什么不试着在控制台中运行它呢?这会弄乱方法的参数,不是有一种关闭方法吗?就像在一个匿名函数中运行该方法,而该函数的闭包中包含self一样?@MohsenShakiba匆忙发布了最后一个函数,试试这个。@torazaburo我刚刚发布的这段代码在控制台中运行正常。是的,但它没有达到OP想要的效果,也就是说(出于某种原因)使用
self
而不是
this
。这不是创建了一个类而不是单个对象吗?使用类可以解决这一问题,但这不是OP要求的。我需要这样做的原因是,在我的ViewController中,我传递了一个对象,就像在主干.extend()方法中一样,但有一些变量是对象的属性,在回调中我无法引用它们。请提供更多代码。我怀疑你是否真的想这么做。@torazaburo你有时间继续私人聊天吗?没想到模块模式会成为参考答案-