問題タブ [object-create]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
370 参照

javascript - Crockfords の Object.create() (Javascript) を使用して先祖のオーバーライドされたメソッドにアクセスする方法

0 投票する
1 に答える
1720 参照

javascript - プロトタイプの継承:Object.createをチェーンできますか?

私はプロトタイプの継承に慣れていないので、「正しい」方法を理解しようとしています。私はこれができると思った:

しかし、代わりに「tbase.BicData.prototypeisundefined」が表示されます

Javaで言えば、私が望んでいるのは、 Tdataを定型的な「インターフェース」として使用し、BicDataをその実装にして、そこからオブジェクトをインスタンス化することです。

どこが間違っているのですか?

0 投票する
15 に答える
199659 参照

javascript - 「new」の代わりに「Object.create」を使用する

Javascript 1.9.3 / ECMAScript 5はObject.create、とりわけDouglasCrockfordが長い間提唱してきたを紹介します。new以下のコードを次のように置き換えるにはどうすればよいObject.createですか?

(存在すると仮定MY_GLOBAL.nextIdします)。

私が思いつくことができる最高のものは次のとおりです。

何のメリットもないようですので、うまくいかないと思います。私はおそらく新古典主義的すぎます。Object.createユーザー「bob」を作成するにはどのように使用すればよいですか?

0 投票する
7 に答える
16820 参照

javascript - Object.create() による JavaScript の継承?

Object.create() で継承するにはどうすればよいですか? 私はこれらを試しましたが、どれも機能していません:

何も機能しませんでした。この新しい Object.create() 関数をどのように使用すればよいですか?

0 投票する
3 に答える
2982 参照

javascript - JavaScript Object.create -- ネストされたプロパティの継承

Douglas Crockfords Object.create メソッドの特殊性に遭遇しました。誰かが説明できることを願っています:

オブジェクト リテラル表記を使用してオブジェクト (たとえば「person」) を作成する場合は、Object.create を使用して新しいオブジェクト (たとえば「anotherPerson」) を作成します。これは、最初の「person」オブジェクトからメソッドとプロパティを継承します。

次に、2 番目のオブジェクト「anotherPerson」の名前の値を変更すると、最初の「person」オブジェクトの名前の値も変更されます。

これは、プロパティがネストされている場合にのみ発生します。このコードは、私が何を意味するかを理解できるはずです。

ネストせずに名前の値を保存した場合、この奇妙な動作は発生しません-たとえば

この入れ子の問題は、コンストラクター関数と「new」キーワードを使用した従来のスタイルの継承を使用する場合には発生しないようです。

なぜこれが起こるのか誰かが説明できれば、私はとても感謝しています!?

0 投票する
2 に答える
302 参照

javascript - Object.createおよび組み込みオブジェクト

組み込みオブジェクト(私の場合はCanvasRenderingContext2Dタイプ)に機能(新しいメソッド)を追加しようとしています。

最初のアプローチは、プロトタイプにメソッドを追加することでした。それは機能しますが、組み込みオブジェクトを変更したくないのです。

Object.create(ES5から)を使用してオブジェクトを拡張することを考えてObject.create(context, <my_method_descriptors>)いましたが、一部のブラウザーでは、拡張オブジェクトのプロパティにアクセスしたり、メソッドを呼び出したりすると失敗します。たとえば、このスニペット

var canvas = document.getElementById("mainCanvas");
var context = canvas.getContext('2d');
var exContext = Object.create(context);
try {
exContext.fillStyle = 'red';
exContext.fillRect(0, 0, 120, 120);
} catch (e) {
alert(e);
}

IE9ベータ版とSafari5では失敗しますが、Firefox4ベータ版とChrome7では成功します。

別の例:Object.create(new Date()).getDate()すべてのブラウザーで失敗します。

何かご意見は?

0 投票する
11 に答える
147000 参照

javascript - Object.create()と新しいSomeFunction()の違いを理解する

私は最近Object.create()JavaScriptのメソッドに出くわし、それがでオブジェクトの新しいインスタンスを作成することとどのように違うのかnew SomeFunction()、そしていつ一方を他方の上で使用したいかを推測しようとしています。

次の例を考えてみましょう。

どちらの場合も同じ動作が見られることに注意してください。これら2つのシナリオの主な違いは次のとおりです。

  • で使用されるオブジェクトはObject.create()実際には新しいオブジェクトのプロトタイプを形成しますがnew Function()、宣言されたプロパティ/関数からはプロトタイプを形成しません。
  • Object.create()機能構文の場合とは異なり、構文を使用してクロージャを作成することはできません。これは、JavaScriptの字句(vsブロック)タイプのスコープを考えると論理的です。

上記の記述は正しいですか?そして、私は何かが欠けていますか?いつ使用しますか?

編集:上記のコードサンプルのjsfiddleバージョンへのリンク:http://jsfiddle.net/rZfYL/

0 投票する
5 に答える
9398 参照

javascript - ES5 Object.createおよびオブジェクトリテラル構文を使用してコンストラクターをエミュレートするにはどうすればよいですか?

私がこのようなオブジェクトを持っていると仮定します:

問題:そのスプライトを正しいsrcで初期化したい。ただし、次の作成手法を使用すると、次のようになります。

セットアップするコンストラクターメソッド(別名init関数)がありませんsprite.src = 'cool.png';

私の質問:

オブジェクトリテラル手法を使用している場合、およびObject.create()、実際に内部状態の一部を初期化するのはいつですか(の例のようにnew Image()

私の解決策:

しかし、それが素晴らしいパターンかどうかはわかりません。方法があれば、これを「JavaScriptWay」にしたいです。:)

ありがとう!

0 投票する
3 に答える
3543 参照

javascript - Javascript Object.create が Firefox で機能しない

Firefox (3.6.14) では常に次の例外が発生します。

これは関数であり、コードは Chrome で意図したとおりに機能すると確信しているため、かなり混乱しています。

この動作の原因となるコード行は次のとおりです。

誰かがすべてのコードを見たい場合は、ポーカー ライブラリ gaga.js からのものです: https://github.com/SlexAxton/gaga.js

多分誰かが Firefox で動作させる方法を知っていますか?

0 投票する
1 に答える
424 参照

javascript - モジュール内のObject.createおよびprivate関数

これは、ES5のObject.createのスタンドアロン実装です。

およびその使用例:

animalプライベート関数を呼び出そうとすると、の内部が少し乱雑になっていることに気づきました。例:

このタイプのパターンに従うためのよりクリーンな方法はありますか?特に、の必要性を排除しますprivFunc.call(this, arg)

別の方法は、同様に醜いです: