gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 16:20:55 25 4
gpt4 key购买 nike

原始问题

无法弄清楚为什么我无法从第一个函数中调用第二个函数。我正在使用 jQuery-turbolinks。 (另外,如果您碰巧知道在 Rails 中只运行特定于页面的 javascript 的更好方法,请告诉我。目前这是我最好的实现,我检查主体是否具有某个类,如果有,则运行此 javascript 对象中的 init 函数)。

app/assets/javascripts/blogs.js

$(document).ready(function(){

var blogsjs = {
myBlog: this,
init: function(){
alert("hello from blogs");
$("input").on('click', function(){
$(this).hide('slow', function(){
myBlog.another();
});
});
},
another: function(){
alert("I was called!")
}
};


if($('body').hasClass("blogs") == true){
blogsjs.init();
}
});

反馈后的解决方案

只需在方法中使用 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 对象内的方法。

最佳答案

我不知道您想通过这部分声明来实现什么目的:

var blogsjs = {   
myBlog: this
}

但是,this 不会设置为 blogsjs。它将是上述函数中的任何内容。在 Javascript 中,this 仅在函数调用时设置。它没有在 Javascript 文字声明中设置,因此您无法静态声明引用对象本身的属性。 JavaScript 就是不支持这一点。

如果需要,您可以在构造对象后添加包含对象引用的属性。

如果您希望将 myBlog 初始化为指向 blogsjs,那么您必须在定义对象后执行此操作:

var blogsjs = {   
init: function() {...},
another: function() {...}
};
blogsjs.myBlog = blogsjs;
<小时/>

此外,这行代码将不起作用:

myBlog.another();

因为myBlog是对象的属性,而不是变量。它必须与其父对象一起引用。

关于Javascript 对象函数调用对象内的另一个函数,Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29135648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com