Javascript对象函数调用对象Rails中的另一个函数
原始问题 我不明白为什么不能从第一个函数中调用第二个函数。我正在使用jQuery TurboLink。(另外,如果您碰巧知道在rails中只运行特定于页面的javascript的更好方法,请告诉我。目前这是我最好的实现,我会检查主体是否有特定的类,如果有,我会在这个javascript对象中运行init函数) app/assets/javascripts/blogs.js 反馈后的解决方案 只需使用方法中的Javascript对象函数调用对象Rails中的另一个函数,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,原始问题 我不明白为什么不能从第一个函数中调用第二个函数。我正在使用jQuery TurboLink。(另外,如果您碰巧知道在rails中只运行特定于页面的javascript的更好方法,请告诉我。目前这是我最好的实现,我会检查主体是否有特定的类,如果有,我会在这个javascript对象中运行init函数) app/assets/javascripts/blogs.js 反馈后的解决方案 只需使用方法中的object.method()语法调用同一对象中的另一个方法: $(documen
object.method()
语法调用同一对象中的另一个方法:
$(document).ready(function(){
var blogsjs = {
init: function(){
alert("hello from blogs");
$("input").on('click', function(){
$(this).hide('slow', function(){
blogsjs.another();
});
});
},
another: function(){
alert("I was called!");
blogsjs.yetanother();
},
yetanother: function(){
alert("yet another called");
}
};
blogsjs.init();
});
我不喜欢这段代码看起来有多凌乱,但我认为面向对象设计带来的封装好处是可靠的:每个资源的javascript只能访问其javascript对象中的方法 因此,您可能会得到一个
无法读取未定义的异常的属性'other',因为您在blogsjs
对象上指定了myBlog
,但没有引用它。另外,myBlog
将不是对blogsjs的引用,但是范围jquery调用document.ready函数
您需要在init
方法中创建引用:
init: function(){
var myBlog = this;
alert("hello from blogs");
$("input").on('click', function(){
$(this).hide('slow', function(){
myBlog.another();
});
});
}
或者只需从init
方法上方的一个范围使用blogsjs
我不知道你想通过这部分声明实现什么:
var blogsjs = {
myBlog: this
}
但是,此
不会设置为blogsjs
。它将是上面函数中的任何内容。在Javascript中,此
仅在函数调用时设置。它不是在Javascript文本声明中设置的,因此不能静态声明引用对象本身的属性。Javascript不支持这一点
如果需要,可以在构造包含对象引用的对象后添加属性
如果要将myBlog
初始化为指向blogsjs
,则必须在定义对象后执行此操作:
var blogsjs = {
init: function() {...},
another: function() {...}
};
blogsjs.myBlog = blogsjs;
此外,这行代码不起作用:
myBlog.another();
因为myBlog
是对象的属性,而不是变量。它必须与其父对象一起引用
myBlog.another();