2016-06-15 13 views
0

新しいSpeechRecognitionオブジェクトを作成した後に、関数onbroadcastSpeechRecognitionに設定できるようにしたいので、特定の条件を満たす場合にこの関数を内部的に呼び出すことができます。内部で呼び出すことができるオブジェクト関数を外部に設定する

onerrorなどをwebkitSpeechRecognitionに設定するのと同じ方法で設定したいと考えています。デベロッパーツールでonerrorを見ると、hereのようなゲッター/セッターのようなものがあるかもしれませんが、私は確信することはできません。

これは可能ですか?

recognition.js:

var SpeechRecognition = function() { 
    var recognitionObject = new webkitSpeechRecognition(); 
    recognitionObject.onresult = function (event) { 
     if(event.results.length > 0) { 
      if (onbroadcast !== null && onbroadcast === 'function') { 
       onbroadcast('there are results'); 
      } 
     } 
    } 
    recognitionObject.onerror = function (event) { 
     console.log(event); 
    } 
    recognitionObject.onend = function (event) { 
     console.log(event); 
    } 
    recognitionObject.start(); 
} 

SpeechRecognition.prototype.onbroadcast = null; 

main.js:

var sr = new SpeechRecognition(); 
sr.onbroadcast = function(msg) { 
    document.getElementById('id') = msg; 
} 
+0

'onupdateraw'と' onbroadcast'は宣言されていない変数ですが、どういう意味ですか?私はあなた 'SpeechRecognition'インスタンスの' .onbroadcast' **プロパティ**を参照したいとします - 通常this' 'と[はなく、コールバックで](http://stackoverflow.com/q/20279484/1048572 ) ここのような。 – Bergi

+0

申し訳ありません - 'onupdateraw'はタイプミスです。 – millarnui

+0

オブジェクトの外側から 'onbroadcast'を何とかしたいのですが、もしそれが設定されていれば、それを呼び出すことができます – millarnui

答えて

0

あなたは、インスタンスのpropertythis.onbroadcast)としてonbroadcastを参照する必要があります。コンストラクタスコープ内の変数として魔法のように利用できるようにはなりません。

function SpeechRecognition() { 
    var self = this; // a reference to the instance 
    var recognitionObject = new webkitSpeechRecognition(); 
    recognitionObject.onresult = function (event) { 
     if (event.results.length > 0 && typeof self.onbroadcast === 'function') { 
      self.onbroadcast('there are results'); 
//   ^a property access 
     } 
    }; 
    recognitionObject.onerror = recognitionObject.onend = function (event) { 
     console.log(event); 
    }; 
    recognitionObject.start(); 
} 
+0

「自己」私はmain.jsでsr.broadcast'は、私はプロパティが設定されていることを確認することができます '設定直後@Bergi –

+0

予約語ですが、' recognitionObject.onresult'は 'self.onbroadcast'を解雇された===未定義。 – millarnui

+0

@BekimBacaj:いいえ、そうではありません。これはグローバル変数( 'window.self')ですが、予約されていません。 – Bergi

関連する問題