Javascript 方法中的函数
这是一个普遍好奇的问题,我一直在自学面向对象的javascript编程,因为我喜欢它提供的结构和灵活性,但我遇到了一个最让我困惑的问题。假设我有以下代码:Javascript 方法中的函数,javascript,jquery,oop,Javascript,Jquery,Oop,这是一个普遍好奇的问题,我一直在自学面向对象的javascript编程,因为我喜欢它提供的结构和灵活性,但我遇到了一个最让我困惑的问题。假设我有以下代码: function total (el,arr,i) { this.across = function(el,arr,i) { $(el).each(function() { if(!$(this).attr("id")) { //-- convert each v
function total (el,arr,i)
{
this.across = function(el,arr,i) {
$(el).each(function() {
if(!$(this).attr("id"))
{
//-- convert each value to a number and push to items array
arr.push(parseFloat($(this).val()));
i = i++;
}
});
return arr;
};
}
我可以创建total的新实例,并将我的元素、数组和索引参数传递给它,然后调用total.Cross来填充我的数组并更新我喜欢的索引:
$(document).ready(function (){
var arr = [[],[],[]];
var i = 0;
var el = $("#hourly input");
var t = new total(el,arr,i);
alert(t.across());
});
我的问题是,一旦输入.each方法,关键字
this
就不再指total的实例,而是指.each方法中传递的元素。那么,如何将返回到数组的值传递给原始函数呢。在本例中,我使用了arr关键字,但这似乎不起作用。在这个例子中,我希望得到新的分配一个上下文变量this
:
this.across = function(el,arr,i) {
var that = this;
$(el).each(function() {
console.log(that); //is "this" from before the .each
将上下文变量指定为this:
this.across = function(el,arr,i) {
var that = this;
$(el).each(function() {
console.log(that); //is "this" from before the .each
将上下文变量指定为this:
this.across = function(el,arr,i) {
var that = this;
$(el).each(function() {
console.log(that); //is "this" from before the .each
将上下文变量指定为this:
this.across = function(el,arr,i) {
var that = this;
$(el).each(function() {
console.log(that); //is "this" from before the .each
谢谢,这很有意义。将来可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用类似MooTools的框架的情况下是如此),这很有意义。将来,可以使用.bind()方法为函数分配上下文。不幸的是,它不适用于IE<9,因为它是Javascript 1.8.5的一部分(至少在不修改函数原型或使用MooTools之类的框架的情况下是如此),您确定问题不仅仅是您的文档就绪函数,或者您在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次感谢你。如果你做得完全错误,你必须这样做->你确定问题不仅仅是你的文档就绪函数?或者你在警报调用中引用了该函数,不调用它?代码不起作用的实际原因可能是,但我的问题是,具体如何保持上下文独立,这回答了我的问题,这实际上只是一个测试脚本,而不是其他任何东西,谢谢大家的提醒。另外,我没有标记jquery,因为问题本身不是jquery特有的。我清理了代码,再次表示感谢。如果你完全错了,你必须这样做->