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你有时间继续私人聊天吗?没想到模块模式会成为参考答案-