2016-07-22 105 views
0

我很确定我做错了什么,但仍然有什么办法可以根据窗口大小设置一个值?有什么方法可以动态地改变对象属性的值吗? JavaScript

这里是一个示例代码:

var setNewValue; 
$(window).resize(function() { 
    if($(window).width() < 768) { 
    setNewValue = "less"; 
    } else { 
    setNewValue = "more"; 
    } 
}); 

var createObject = function(property) { 
    this.property = property; 
    this.showProperty = function() { 
    document.write(this.property); 
    }; 
}; 

var example = new createObject(setNewValue); 
example.showProperty(); 

//未定义

+2

您是否调整窗口大小来触发事件处理程序? –

+0

是的,必须根据窗口大小设置值 –

+5

'setNewValue'和'property'不是对象。这就是为什么没有参考。 – Bergi

回答

0

var createObject = function(property) { 
 
    return { 
 
    property: property, 
 
    getProperty: function() { 
 
     return this.property; 
 
    } 
 
    }; 
 
}; 
 

 
var example = createObject(); 
 

 
$(window).resize(function() { 
 
    example.property = $(window).width() < 768 ? "less" : "more"; 
 
    document.write(example.getProperty()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

但它也给出了未定义的调整大小功能 –

+0

@MykytaKhilai重新检查它,请 –

+0

似乎工作!谢谢! –

0

看起来你在这里有一个竞争条件。当脚本运行时,发生的事情是:

  1. setNewValue变量定义(它的值是undefined此刻)
  2. resize事件处理函数定义
  3. createObject()被称为当前setNewValue值是仍然undefined

除非有步骤2和3之间没有resize事件触发,你将永远与setNewValue = undefined调用createObject()时结束。

我不确定这里的大图是什么,因为你只发布了一段代码,但你需要确保在访问它时已经设置了setNewValue变量 - 例如通过明确地设置它的某个地方在脚本的开头。

相关问题