2016-01-31 1 views
1

index.htmlJavasctipt объекта операторского от массива

<body> 
    <canvas id ="mainCanvas" width = "400" height = "400"></canvas> 
    <script src ="script.js"></script> 
    <script src ="test.js"></script> 

</body> 

test.js

var canvas = document.getElementById("mainCanvas") 
var context = canvas.getContext("2d") 

var array = [ 
    context.fillRect 
] 

array[0](10,10,10,10) 

Он говорит:

Uncaught TypeError: Illegal invocation

context.fillRect(10,10,10,10) Обычно это работает ...

Итак, почему я не могу назвать эту ссылку из массива?

+0

почему вам нужно сохранить ту же самую функцию в массиве многократным время? – CY5

+0

Просто функциональность тестирования – ShinigamiYuu

ответ

2

Проблема здесь на самом деле контекст. Когда вы вводите массив [0], вы находитесь в контексте этого функционального объекта (функция является объектом в javascript). Но вы хотите быть в контексте контекстной переменной. Таким образом, есть два решения

var canvas = document.getElementById("mainCanvas") 
var context = canvas.getContext("2d") 

var array = [ 
function(params) { 
context.fillRect(params) 
} 
] 

array[0](10,10,10,10) 

или второй метод с использованием call

var canvas = document.getElementById("mainCanvas") 
var context = canvas.getContext("2d") 

var array = [ 
context.fillRect 
] 

array[0].call(context,10,10,10,10) 
+0

Wow thanks;) Как я могу не вызывать, что без этой функции (params) Вызывает свою функцию вызывающих объектов? – ShinigamiYuu

Смежные вопросы