Arrayオブジェクトの拡張について 2017-06-01 (Thu) 00:47

このところ TEが面白過ぎていろいろいじっている。

ふと Arrayオブジェクトに find を実装しようとしてこんなコードを実行したら空白のダイアログが表示され続けて

タスクマネージャで終了するしかなくなってしまう。
Array.prototype.find = function(callback, thisArg){
for(var i = 0, len = this.length; i < len; i++){
if(callback.call(thisArg, this[i], i, this)) return this[i];
}
return undefined;
}

kiji233-01.jpg

2017/06/02 追記

最新バージョン(17.5.29)をまっさらの状態でやってみたらこんなメッセージが出てた。
ソースを追おうと思ったけど追いきれんかった。orz

kiji233-02.jpg


当たり障りのないコードだと空白のダイアログは出ないけど、そのまま使っているとタブのタイトルが消えてしまったり

コンテキストメニューを表示するとエラーが出たり、TEの挙動がおかしくなってしまう。
Array.prototype.find = function(){ return this; }

Stringオブジェクトの拡張を試してみたところ普通に使える。
String.prototype.right = function(n){
return (n >= this.length) ? this : this.substr(this.length - n, n);
}
String.prototype.left = function(n){
return (n >= this.length) ? this : this.substr(0, n);
}

環境問題かなぁ。orz ..... Arrayオブジェクトはそっとしておこう。

2017/09/05 追記

「不特定多数の人が使用するライブラリなどにおける prototypeの独自拡張はお行儀の悪い行為」

なんだそうで、TEはシステムの一部がJScriptで書かれておりスクリプトやアドオンでオブジェクトを独自拡張してしまうと

TEのシステムの方に悪影響が出てしまうみたい。

特にArrayオブジェクトは for in ループでメンバを列挙して使うことも多いので

この時に独自に拡張したメンバも含まれてしまってエラーを引き起こしている模様。

どうしてもオブジェクトを拡張したい場合は、それを継承したオブジェクトに対して行うようにすべし!ってことで。

参照)
http://uupaa.hatenablog.com/entry/2012/11/07/143947
http://d.hatena.ne.jp/cyokodog/20081031/ArrayExtend01
http://w3q.jp/t/7091


@TE64 17.5.28 Win 6.1.7601 WS 300 Admin IE 11 ja_jp
関連記事
注意事項
基本的にこのブログはブログ主の備忘録です。

ブログの内容にはブログ主の主観や時には正確でない情報が含まれていることもあります。書いてある内容がすべての環境にあてはまることを保証するものでもありません。

また、過去の記事は現時点で既に陳腐化していることもあります。

その辺をご理解の上で当ブログ内に書いてあることを試す場合は自己責任でお願いします。

記事内容の誤りの指摘、疑問点の回答などコメント頂けると助かります。
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
ブログ内検索
カラーコードチェッカ
カラーコードの確認
入力例) #ffffff | blue
カテゴリ
最新記事
最新コメント
最新トラックバック
リンク
ブロとも申請フォーム

この人とブロともになる

メールフォーム

名前:
メール:
件名:
本文: