問題タブ [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.
javascript - プロトタイプの継承:Object.createをチェーンできますか?
私はプロトタイプの継承に慣れていないので、「正しい」方法を理解しようとしています。私はこれができると思った:
しかし、代わりに「tbase.BicData.prototypeisundefined」が表示されます
Javaで言えば、私が望んでいるのは、 Tdataを定型的な「インターフェース」として使用し、BicDataをその実装にして、そこからオブジェクトをインスタンス化することです。
どこが間違っているのですか?
javascript - 「new」の代わりに「Object.create」を使用する
Javascript 1.9.3 / ECMAScript 5はObject.create
、とりわけDouglasCrockfordが長い間提唱してきたを紹介します。new
以下のコードを次のように置き換えるにはどうすればよいObject.create
ですか?
(存在すると仮定MY_GLOBAL.nextId
します)。
私が思いつくことができる最高のものは次のとおりです。
何のメリットもないようですので、うまくいかないと思います。私はおそらく新古典主義的すぎます。Object.create
ユーザー「bob」を作成するにはどのように使用すればよいですか?
javascript - Object.create() による JavaScript の継承?
Object.create() で継承するにはどうすればよいですか? 私はこれらを試しましたが、どれも機能していません:
と
と
何も機能しませんでした。この新しい Object.create() 関数をどのように使用すればよいですか?
javascript - JavaScript Object.create -- ネストされたプロパティの継承
Douglas Crockfords Object.create メソッドの特殊性に遭遇しました。誰かが説明できることを願っています:
オブジェクト リテラル表記を使用してオブジェクト (たとえば「person」) を作成する場合は、Object.create を使用して新しいオブジェクト (たとえば「anotherPerson」) を作成します。これは、最初の「person」オブジェクトからメソッドとプロパティを継承します。
次に、2 番目のオブジェクト「anotherPerson」の名前の値を変更すると、最初の「person」オブジェクトの名前の値も変更されます。
これは、プロパティがネストされている場合にのみ発生します。このコードは、私が何を意味するかを理解できるはずです。
ネストせずに名前の値を保存した場合、この奇妙な動作は発生しません-たとえば
この入れ子の問題は、コンストラクター関数と「new」キーワードを使用した従来のスタイルの継承を使用する場合には発生しないようです。
なぜこれが起こるのか誰かが説明できれば、私はとても感謝しています!?
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()
すべてのブラウザーで失敗します。
何かご意見は?
javascript - Object.create()と新しいSomeFunction()の違いを理解する
私は最近Object.create()
JavaScriptのメソッドに出くわし、それがでオブジェクトの新しいインスタンスを作成することとどのように違うのかnew SomeFunction()
、そしていつ一方を他方の上で使用したいかを推測しようとしています。
次の例を考えてみましょう。
どちらの場合も同じ動作が見られることに注意してください。これら2つのシナリオの主な違いは次のとおりです。
- で使用されるオブジェクトは
Object.create()
実際には新しいオブジェクトのプロトタイプを形成しますがnew Function()
、宣言されたプロパティ/関数からはプロトタイプを形成しません。 Object.create()
機能構文の場合とは異なり、構文を使用してクロージャを作成することはできません。これは、JavaScriptの字句(vsブロック)タイプのスコープを考えると論理的です。
上記の記述は正しいですか?そして、私は何かが欠けていますか?いつ使用しますか?
編集:上記のコードサンプルのjsfiddleバージョンへのリンク:http://jsfiddle.net/rZfYL/
javascript - ES5 Object.createおよびオブジェクトリテラル構文を使用してコンストラクターをエミュレートするにはどうすればよいですか?
私がこのようなオブジェクトを持っていると仮定します:
問題:そのスプライトを正しいsrcで初期化したい。ただし、次の作成手法を使用すると、次のようになります。
セットアップするコンストラクターメソッド(別名init関数)がありませんsprite.src = 'cool.png';
私の質問:
オブジェクトリテラル手法を使用している場合、およびObject.create()
、実際に内部状態の一部を初期化するのはいつですか(の例のようにnew Image()
)
私の解決策:
しかし、それが素晴らしいパターンかどうかはわかりません。方法があれば、これを「JavaScriptWay」にしたいです。:)
ありがとう!
javascript - Javascript Object.create が Firefox で機能しない
Firefox (3.6.14) では常に次の例外が発生します。
これは関数であり、コードは Chrome で意図したとおりに機能すると確信しているため、かなり混乱しています。
この動作の原因となるコード行は次のとおりです。
誰かがすべてのコードを見たい場合は、ポーカー ライブラリ gaga.js からのものです: https://github.com/SlexAxton/gaga.js
多分誰かが Firefox で動作させる方法を知っていますか?
javascript - モジュール内のObject.createおよびprivate関数
これは、ES5のObject.createのスタンドアロン実装です。
およびその使用例:
animal
プライベート関数を呼び出そうとすると、の内部が少し乱雑になっていることに気づきました。例:
このタイプのパターンに従うためのよりクリーンな方法はありますか?特に、の必要性を排除しますprivFunc.call(this, arg)
。
別の方法は、同様に醜いです: