0
我遇到了一個問題,當我嘗試在Angular上使用Javascript原型調用自己的方法時出現錯誤(未定義不是函數)指示。在使用純Javascript時,我從來沒有遇到過這個問題,所以不知道發生了什麼。在Angular指令中調用Javascript原型,調用函數對自己是undefined
如果我打電話的方法使用Whatever.prototype.whateverFunction()
它的工作原理,但是當使用self = this
和self.whateverFunction()
它給我沒有定義。
任何想法?代碼如下。具體而言,它是不被調用的drawBackground()
函數。
感謝
jpDirectives.directive 'falling', ->
link = ($scope, element, attrs) ->
Drop = ->
self = this
self.init()
Drop.prototype = {
ctx: {}
imgBg: ''
x: 0
y: 0
noOfDrops: 50
fallingDrops: []
canvas: {}
drop: 0
i: 0
drawBackground: ->
self = this
self.ctx.drawImage(self.imgBg, 0, 0)
draw: ->
self = this
console.log 'draw called'
self.drawBackground()
while self.i < self.noOfDrops
self.ctx.drawImage(self.fallingDrops[self.i], self.fallingDrops[self.i].x, self.fallingDrops[self.i].y)
self.fallingDrops[self.i].y += self.fallingDrops[self.i].speed #set falling speed
if self.fallingDrops[self.i].y > 450 #repeat when out of view
self.fallingDrops[self.i].y = -25
self.fallingDrops[self.i].x = Math.random() * 600
self.i++
init: ->
self = this
self.canvas = document.getElementById('canvas')
if self.canvas.getContext
self.ctx = self.canvas.getContext('2d')
self.imgBg = new Image()
self.imgBg.src = "http://lorempixel.com/600/600"
setInterval(self.draw, 36)
while self.drop < self.noOfDrops
console.log self.noOfDrops
fallingDr = new Object()
fallingDr["image"] = new Image()
fallingDr.image.src = 'http://lorempixel.com/10/10'
fallingDr["x"] = Math.random() * 600
fallingDr["y"] = Math.random() * 5
fallingDr["speed"] = 3 + Math.random() * 5
self.fallingDrops.push(fallingDr)
self.drop++
}
new Drop()
return {
link: link
}
代碼不能編譯爲JavaScript,所以我不能讀它。 '第97行錯誤:缺失)' – hgoebl 2014-09-28 12:24:04
控制檯在設置自我之前記錄此信息並查看它是什麼。也許這個函數不是用new調用的,而且這是窗口。 – HMR 2014-09-28 15:46:33