2016-07-22 96 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變量 - 例如通過明確地設置它的某個地方在腳本的開頭。

相關問題