javascript原型函数 - '不是函数'

时间:2016-06-02 23:28:17

标签: javascript inheritance prototype this

问题:
我有一段代码会引发错误:this.isEmpty is not a function
我无法弄清楚为什么。以下是片段(jsfiddle)

function addAlbumGrid(){
  const MainGrid = new AlbumGrid ()
return MainGrid
}

function AlbumGrid() {
  MainGrid.call(this)
}

var parentPrototype = Object.create(AlbumGrid.prototype)
parentPrototype.constructor = MainGrid
MainGrid.prototype = parentPrototype

AlbumGrid.prototype.addPhotoBox = function () {

  MainGrid.prototype.add.call(this)
}

function MainGrid(){
}

MainGrid.prototype = {
  isEmpty: function() {
    {
      return false
    }
  },

  add:function() {
    if(!this.isEmpty())
    {
      return false
    }
  }
}

var AlbumGrid=addAlbumGrid()
AlbumGrid.addPhotoBox()

以下代码有效(jsfiddle)

function animal()  {
}
animal.prototype = {
  canWalk: function () {
    return true
  },
  move: function () {
  if(this.canWalk()) {alert ('moving')}
 }
}
function bird() {
  animal.call(this)
}
var animalProto = Object.create(animal.prototype)
animalProto.constructor = bird
bird.prototype = animalProto

bird.prototype.fly = function () {
  animal.prototype.move.call(this)
}

let fluffy = new bird ()
fluffy.fly()

寻找帮助我降落在this page,是不是我在某个地方失去了this的背景,它指的是我不想要的东西?

在这种情况下,使用合成的解决方案是一个选项(object.assign(..))吗?

或者它可以是其他什么?

我希望有人能说清楚。

谢谢...

Ps编辑:我现在已经更新了代码,前3条评论反映了这篇文章的旧版本。

0 个答案:

没有答案