2016-01-26 59 views
0

嗨我想列出CanvasRenderingContext2D對象的所有方法和屬性。我在列表方法中取得成功,但是當我嘗試列出屬性時,我得到了奇怪的結果。我得到的只是一個重複多次的相同屬性的數組。任何人都可以幫助我呢?CanvasRenderingContext2D的Lis屬性

var canvas = document.querySelector('#canvas'); 
 
var ctx = canvas.getContext('2d'); 
 

 
var methods = []; 
 
     for (var m in ctx) { 
 
      if (typeof ctx[m] == "function") { 
 
       methods.push(m); 
 
       methods.join(','); 
 
      } 
 
     } 
 
     var methodsContainer = document.querySelector('#methods'); 
 
     for(var i = 0; i < methods.length; i++) { 
 
      var opt = methods[i]; 
 
      var el = document.createElement("option"); 
 
      el.textContent = opt; 
 
      el.value = opt; 
 
      methodsContainer.appendChild(el); 
 
     } 
 
    var properties = []; 
 
     for (var key in ctx) { 
 
      if (Object.getOwnPropertyNames(ctx)) { 
 
       properties.push(m); 
 
       properties.join(','); 
 
      } 
 
     } 
 

 
     var propertiesContainer = document.querySelector('#properties'); 
 
     for(var i = 0; i < methods.length; i++) { 
 
      var opt = properties[i]; 
 
      var el = document.createElement("option"); 
 
      el.textContent = opt; 
 
      el.value = opt; 
 
      propertiesContainer.appendChild(el); 
 
     }
<canvas id="canvas"></canvas> 
 
    
 
    <h5>Methods</h5> 
 
    <select id="methods"> 
 

 
    </select> 
 
    <br/> 
 
    <h5>Properties</h5> 
 
    <select id="properties"> 
 

 
    </select>

+0

你總是推的最後一個方法了。 ('properties.push(米)')。此外,方法是屬性,如果不檢查方法是否是方法,則會獲取兩次。 – Kaiido

回答

1

這條線(聲明的屬性變量後):

for(var i = 0; i < methods.length; i++) { 

應該是:

for(var i = 0; i < properties.length; i++) { 

你的循環次數的量方法有值,當你應該循環屬性

該行還:

for (var key in ctx) { 
     if (Object.getOwnPropertyNames(ctx)) { 
      properties.push(m); 
      properties.join(','); 
     } 
    } 

你推m個變量,當也許你打算推「鍵」

+0

哦,是的,這是一個愚蠢的錯字...然而改變它並沒有解決問題:( – przemoo83

+1

這條線怎麼樣:properties.push(m); m在哪裏宣佈,它應該是關鍵? – allu

+0

是是它:)複製代碼時簡單的錯誤。謝謝! – przemoo83