如何定义应用程序的方法
How to define methods for an application
这与
我今天提出的另外两个问题类似,但我仍在尝试了解如何在JavaScript中正确分配变量。
我的代码的输出是这样的:
x: 3
x: undefined // I was expecting 3 here
这是我的代码:
var myApplication = {};
(function() {
function beep(x) {
console.log('x: ' + x);
var closure = {};
return function() {
console.log('return function() {');
if (arguments.length) {
console.log('setter: ' + x);
closure.result = x;
} else {
console.log('getter: ' + closure.result);
return closure.result;
}
}
}
myApplication.beep = beep;
})();
myApplication.beep(3);
RESULT = myApplication.beep();
我认为问题出在哪里我说:myApplication.beep = beep;我认为我必须通过原型或其他方式分配它。
首先,函数在javascript中是一等公民。
所以当你这样做时
return function() {
console.log('return function() {');
if (arguments.length) {
console.log('setter: ' + x);
closure.result = x;
} else {
console.log('getter: ' + closure.result);
return closure.result;
}
}
此函数不执行,您仅作为 beep 函数的值返回。
因此,在我们的例子中,唯一真正执行的代码是:
var myApplication = {};
(function() {
function beep(x) {
console.log('x: ' + x);
}
myApplication.beep = beep;
})();
myApplication.beep(3);
RESULT = myApplication.beep();
在这种情况下,您只记录传递给beep
的第一个参数,因此3
然后undefined
。
现在对于你想在这里做的事情,不需要使用闭包或原型:
var myApplication = {
x : null,
beep : function (x) {
if (typeof x != 'undefined') {
this.x = x;
} else {
return this.x;
}
}
};
// set x
myApplication.beep(3);
// get x
var x = myApplication.beep();
console.log('x :', x);
我会避免过早地弄乱关闭。
当你第一次调用 beep(3( 时,它会返回一个函数 - 但你实际上并没有用这个函数做任何事情。我想你可能在倒数第二行是这个意思?...:
myApplication.beep = myApplication.beep(3);
事实上,我认为第二次调用哔哔声只是返回另一个函数,但其"x"参数设置为 undefined。
另外:为了节省一些代码编写,而不是声明然后分配"哔哔",你可以这样写:
myApplication.beep = function(x) { ...
或者,可以从一开始就立即声明整个对象:
myApplication = {
beep: function(x) {
},
otherFn: function(y) {
}
}
相关文章:
- 使用jquery.load('pageName')方法时,未从应用程序缓存加载Html页
- 有没有一种方法可以从Javascript检测特定的应用程序是否安装在(AndroidiOS)设备上
- Meteor应用程序无法运行-对象#<编译器>没有方法'主机'
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 在变量中保存值的最佳方法是在应用程序关闭后使用,然后使用apachecordova在android中重新启动
- 使用子字符串方法时应用程序挂起的原因
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- 验证数据并将其保存到数据库以供实时应用程序使用的正确方法
- Jquery 委托方法应用程序
- 在单页应用程序上进行客户端路由的正确方法是什么
- 网络应用程序的正确instagram身份验证方法(没有instagram帐户的用户)
- 从angular js中的另一个ng应用程序调用方法
- Nodejitsu:有没有一种方法可以对应用程序进行密码保护
- 有没有一种方法可以在IE8中解决我的Rails javascript应用程序.js的问题
- 如何在Spotify应用程序中创建discincts JS方法
- 有没有一种简单的方法可以将ExtJS 4 MVC应用程序转换为ExtJS DeftJS MVC
- iOS版离线Jquery Mobile应用程序中处理导航的正确方法
- Ember.js应用程序架构与路由器,如何避免重复的方法
- 谷歌应用程序脚本:如何在不使用getComment()方法的情况下将第二条注释添加到第一条注释中
- 设计具有数据持久性的web应用程序的更好方法