2016-06-15 40 views
0

我希望能够在创建新的SpeechRecognition对象后在SpeechRecognition中设置函数onbroadcast,以便在满足特定条件时可以在内部调用此函数。设置可在内部调用的外部对象函数

我希望能够以与您在webkitSpeechRecognition中设置类似onerror之类的方式进行设置。当我在开发人员工具中查看onerror时,看起来它可能通过某种类型的getter/setter完成,如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

您需要参考onbroadcast为您的实例(this.onbroadcast)的property。它不会在构造函数的作用域内变成可用的变量。

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

“self”是一个保留字@Bergi –

+0

在main.js中设置sr.broadcast后,我可以看到属性已经设置,但是当'recognitionObject.onresult'被触发'self.onbroadcast' ===未定义。 – millarnui

+0

@BekimBacaj:不,它不是。这是一个全局变量('window.self'),是的,但没有保留。 – Bergi