MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
サンプルコードのエラー? 使い方の問題? https://forums.mozillazine.jp/viewtopic.php?f=32&t=7790 |
ページ 1 / 1 |
作成者: | naoshi [ 2008年9月10日(水) 18:01 ] |
記事の件名: | サンプルコードのエラー? 使い方の問題? |
本の109ページのサンプルコードの8行目でエラーが発生しました。 http://firefox3hacks.org/source/ch3/20-109.txt コード: init : function() {
var target = this.target; this.types.forEach(function(aType) { target.events.addListener(aType, target); // ←ココ }); }, エラーの内容。 引用: //エラー: uncaught exception: [Exception... "Could not convert JavaScript argument arg 1 [extIEvents.removeListener]" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: chrome://helloworld/content/helloworld.js :: anonymous :: line 14" data: no]
forEachの前に var tmp=this として、addLister(aType, tmp) とすることで 期待した動作になっているように見えますが、あっているでしょうか? よろしくお願いいたします。 # まだFirefoxとJavaScriptをはじめたばかりなので、 # 実行方法などの問題でしたら申し訳ありません |
作成者: | あ [ 2008年9月14日(日) 00:06 ] |
記事の件名: | Re: サンプルコードのエラー? 使い方の問題? |
naoshi さんが書きました: forEachの前に var tmp=this として、addLister(aType, tmp) とすることで
期待した動作になっているように見えますが、あっているでしょうか? それであっていると思います。自分なら コード: for (var i in this.types) { とするかな。
target.events.addListener(this.types[i], this); } |
作成者: | naoshi [ 2008年9月17日(水) 13:59 ] |
記事の件名: | Re: サンプルコードのエラー? 使い方の問題? |
functionの中にthisを渡すよりすっきりですね。 ありがとうございました。 |
作成者: | Piro [ 2008年9月22日(月) 10:32 ] |
記事の件名: | Re: サンプルコードのエラー? 使い方の問題? |
あわわわ。すみません。リファクタリングの時かなんかにやらかしてしまったようです。以下を「正式版」とさせてください。(増刷分からはこちらに差し替えてもらいます) コード: function FUELEventListener(aTypes, aTarget, aHandler) {
this.types = aTypes.split(/,\s*|\s+/); this.target = aTarget; this.handleEvent = aHandler; } FUELEventListener.prototype = { init : function() { this.types.forEach(function(aType) { this.target.events.addListener(aType, this); }, this); }, destroy : function() { this.types.forEach(function(aType) { this.target.events.removeListener(aType, this); }, this); this.types = this.target = this.handleEvent = null; } }; var pref = Application.prefs.get('browser.sessionstore.resume_session_once'); var listener = new FUELEventListener('change', pref, function(aEventItem) { alert('pref is changed!'); this.destroy(); } ); listener.init(); |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |