Javascript对象函数调用对象Rails中的另一个函数

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

原始问题

我不明白为什么不能从第一个函数中调用第二个函数。我正在使用jQuery TurboLink。(另外,如果您碰巧知道在rails中只运行特定于页面的javascript的更好方法,请告诉我。目前这是我最好的实现,我会检查主体是否有特定的类,如果有,我会在这个javascript对象中运行init函数)

app/assets/javascripts/blogs.js

反馈后的解决方案

只需使用方法中的
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();