有没有办法动态更改对象属性的值? JavaScript的

时间:2016-07-22 13:21:53

标签: 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();

// undefined

2 个答案:

答案 0 :(得分:0)

&#13;
&#13;
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());
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

看起来你有竞争条件。当脚本运行时,发生的是:

  1. setNewValue变量已定义(目前该值为undefined
  2. 定义了resize事件处理程序
  3. 使用当前createObject()值调用
  4. setNewValue,该值仍为undefined
  5. 除非在步骤2和3之间没有触发调整大小事件,否则在调用setNewValue = undefined时,您始终会以createObject()结束。

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