我在想,拥有一个带变量和方法的函数可以让子函数引用变量。也许我做错了,并想就如何正确地填充这些东西提出一些建议。
function somefunction(callback) {
var x,y,z;
var timervar = setInterval(function() {
//...
callback().always(function() {
x++;
});
//...
}, 1);
}
我如何正确地联系X?
修改
我在while循环中进行一些迭代。 x,y,z是存储计数器信息的变量。当回调完成执行时,我或多或少地增加或减少了一个变量。
它不调用更多callback()的原因是因为它在while循环中。因为它与X值有关,所以很好,很花哨。似乎在某一点之后,它退出while循环的范围并等待.always()被触发,这样它就可以恢复while循环。 while循环设置在计时器内,因此它每隔10ms检查一次是否准备继续查看。
最终编辑:总是没有解雇,因为我忘记了回调()中的返回,因此它从未被识别为已完成。 _
答案 0 :(得分:3)
另一种方法是制作自包含的模块:
somefunction = (function() {
var x,y,z;
return {
callback: function(){
return x++;
}
}
});
您可以在http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript
上浏览有关JavaScript设计模式的精彩文档答案 1 :(得分:2)
尝试类似
的内容var SomeObj = {
x: 0,
myFunc : function(){
SomeObj.x++;
}
}
答案 2 :(得分:1)
试试这个:
function createObject(o) {
function F() {}
F.prototype = o;
return new F();
}
取自Prototypal Inheritance:http://javascript.crockford.com/prototypal.html
var SomeObj = {
x: 0,
myFunc : function(){
SomeObj.x++;
}
}
var newObj = createObject(SomeObj);
也许这篇文章有帮助吗? https://stackoverflow.com/a/3075818/566012
答案 3 :(得分:0)
我在JS中使用了以下继承实现
/**
* inheritance
*
* @author Kevin Lindsey
* @version 1.0
*
* copyright 2006, Kevin Lindsey
*
*/
// namespace placeholder
TWE = {};
/**
* A function used to extend one class with another
*
* @param {Object} subClass
* The inheriting class, or subclass
* @param {Object} baseClass
* The class from which to inherit
*/
TWE.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
然后你可以这样做:
function myBaseClass() {
this._datamember1 = ....;
//more data members
}
function mySubClass() {
mySubClass.baseConstructor.call(this);
//list additional data members here
}
TWE.extend(mySubClass, myBaseClass);
在这里看到更多 http://www.kevlindev.com/tutorials/javascript/inheritance/index.htm
答案 4 :(得分:0)
我会说你可以分配
var me = this;
然后在你的代码中你可以使用me.x,me.y等。