2015-12-13 28 views
0

對不起,我甚至不知道如何爲這個問題或我應該搜索什麼(一個Javascript新手),最好的解釋方法可能是向你展示代碼。我正在嘗試使用GrovePI Node庫(https://github.com/DexterInd/GrovePi/tree/master/Software/NodeJS),但我想將「board」抽象爲帶有原型的類,以便我可以從多個位置引用該板。爲什麼我不能在'this'上引用某些內容,但是我可以在使用var時使用?

下面的代碼一直工作到某一點。 'board'被定義,當board.init()被調用時,我們會成功打印版本。

var GrovePiBoard = function() { 

    this.commands = GrovePi.commands; 
    var board = new GrovePi.board({ 
     debug: true, 
     onError: function(err){ 
      console.log('GrovePiBoard.js: Something went wrong'); 
      console.log(err) 
     }, 
     onInit: function(res) { 
      if(res){ 
       console.log('GrovePiBoard.js: GrovePi Version :: ' + board.version()); 
      } else { 
       console.log('GrovePiBoard.js: res is false'); 
      } 
     } 
    }); 
    // This works 
    board.init(); 
}; 

GrovePiBoard.prototype.init = function() { 
    console.log('Initialising board'); 
    // I want to do board.init() here. 
}; 

但是,我真的希望能夠訪問init原型函數上的板對象。事情是這樣的..

var GrovePiBoard = function() { 
    this.commands = GrovePi.commands; 
    this.board = new GrovePi.board({ 
     debug: true, 
     onError: function(err){ 
      console.log('GrovePiBoard.js: Something went wrong'); 
      console.log(err) 
     }, 
     onInit: function(res) { 
      if(res){ 
       console.log('GrovePiBoard.js: GrovePi Version :: ' + this.board.version()); 
      } else { 
       console.log('GrovePiBoard.js: res is false'); 
      } 
     } 
}); 
// This doesn't work here 
this.board.init(); 
}; 

GrovePiBoard.prototype.init = function() { 
    console.log('Initialising board'); 
    // This doesn't work either 
    this.board.init(); 
}; 

當運行上面的代碼,我得到ReferenceError: board is not defined只要this.board.init();被調用。

爲什麼我不能將電路板放在'this'上,然後從原型中引用它?

+0

這是完全不清楚什麼你正在嘗試做的。對我來說,這看起來像是你過於複雜的事情,然後被一切複雜的事情弄糊塗了。 – Tomalak

+0

@Tomalak我覺得我得到的問題:-)看看我的答案... –

回答

1

雖然這是可行的,但您可能想看看您的初始設計。如果您使用prototype.init您正在尋找構造函數。

初始化與您一起運行運行(當它被稱爲)

看看下面這個例子,如何在功能和init調用和使用。

function GrovePiBoard() { 
    var results = this.init.apply(this, arguments); // call the init including the arguments 
    console.log('The actual function, init returned: ' + results); 
} 

GrovePiBoard.prototype.init = function() { 
    console.log('The init function'); 
    return 'Im returned from the init'; 
}; 

var GrovePiBoard = new GrovePiBoard(); 

的jsfiddle:https://jsbin.com/worisikobo/1/edit?js,console

+1

說明會改善這個答案 –

+0

工作對現在:-P 編輯將在那裏很快 –

+0

@RuneFS用小提琴 –

0

相反的:

this.board.init();

應該是這樣的: Board = new GrovePiBoard(); Board.init();

相關問題