在嵌套对象中继承此作用域
Inheriting this scope in nested object
我在JS中调用以下方法:
app.execute({
first: function() {
console.log('executed');
oneMethod(); // function undefined
app.oneMethod(); // works
this.oneMethod(); // works when I exract app object into this variable
},
second: function() {
}
});
应用程序对象如下所示:
var app = function() {
var oneMethod = function() {
};
var secondMethod = function() {
};
var execute = function(first, second) {
var obj = new first();
};
this.oneMethod = oneMethod;
this.secondMethod = secondMethod;
this.execute = execute;
};
因此,第一个代码位于HTML中,第二个是外部库。我在execute()
参数中使用了外部库的方法。我想这样做,这样我在全局命名空间中就不会有任何冲突——只有app
变量,它的方法只能在它的参数对象中使用。
因此,当我用new
关键字创建一个对象时,我希望在它的构造函数中有相同的名称空间,就像我在创建这个对象的地方所做的那样。
这可能吗?有更好的方法吗?
听起来你不希望app
是一个构造函数,而是一个对象本身。您可以使用揭示模块模式(一个返回IIFE的对象)轻松地构建它:
var app = (function() {
function oneMethod() {
…
}
function secondMethod() {
…
}
function execute(first, second) {
var obj = new first();
}
return {
oneMethod: oneMethod,
secondMethod: secondMethod,
execute: execute
};
}());
我们创建了一个命名空间app
,将方法绑定到命名空间,这样这些方法就不会泄漏到全局。即method
未定义(要求#1),app.method()
"有效"(要求#2)
app = {
execute(First, Second) {},
method(){}
};
我们在app.execute()
中创建了一个First
的实例,希望"在其构造函数中具有相同的命名空间",以便First
构造函数中的this.method
是相同的app.method
(需求#3)。小提琴
app = {
execute(First, Second) {
var object = Object.create(app);
First.call(object);
},
method() {}
};
如果存在app.method
依赖的秘密变量
app = (function () {
var secret = 'variable';
return {
execute(First, Second) { /*...*/ },
method() { return secret }
};
}());
请注意,我们使用了自ES2015以来引入的"对象初始值设定项上方法定义的较短语法"。(Thx,@Bergi)我们可以像一样将ES6解决方案转换为ES5
app = {
execute: function (First, Second) {
var object = Object.create(app);
First.call(object);
},
method: function () {}
};
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- Angular中的作用域继承$broadcast
- 作用域变量未从状态父控制器继承到子控制器
- AngularJS观察指令属性表达式,动态继承作用域
- 为什么可以't我的指令从其父作用域继承函数
- 在嵌套对象中继承此作用域
- Angularjs.嵌套指令中的继承作用域
- AngularJS自定义指令在继承父作用域时访问模板中的属性
- 角度指令的作用域继承
- Angularjs将变量传递给具有继承(而非隔离)作用域的指令
- 角度指令控制器作用域继承
- 如何将继承作用域和隔离作用域一起使用
- 什么时候应该使用继承作用域,什么时候不应该
- AngularJS:嵌套指令和作用域继承
- Angular中的作用域没有正确继承
- 两个子类继承了超类的属性,并且没有失去作用域
- 不使用作用域的AngularJS继承模式
- 在angular指令中继承自parent的新作用域
- Javascript变量作用域和继承