問題タブ [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で作成されたJavascript配列-実際の配列ではありませんか?
Object.createで作成された配列は、配列のように歩き、配列のようにクワクするように見えますが、それでも実際の配列ではありません。少なくともv8/node.jsでは。
Javascriptの第一人者が、その理由と、新しく作成した配列を実際の配列と区別できないようにする方法を説明できますか?
ここでの私の目標は、カスタムプロパティがアタッチされている可能性のある配列を含むデータ構造のクローンを作成することです。もちろん、を使用して新しく作成された配列にプロパティを手動でアタッチすることもできますが、をObject.defineProperty
使用してそれを行う方法はありObject.create
ますか?
javascript - Object.create と名前付きコンストラクターを使用したプロトタイプの OO
私は Python と Smalltalk のバックグラウンドから Javascript に来ており、この言語における Self と Lisp の系統に感謝しています。ECMAScript5 を使用して、new 演算子を使用せずにプロトタイプの OO を試してみたかったのです。
制約:
- クラスを作成するオプションの new 演算子
- instanceof のプロトタイプ チェーンは正しくなければなりません
- WebInspector デバッグ サポート用の名前付きコンストラクター
- alloc().init() は、Objective-C や Python のような作成シーケンス
基準を満たすための実装での私の試みは次のとおりです。
そして、それは単純なモックアップで動作するようです:
クラスをファクトリ関数として使用する:
または new 演算子を使用します。
私の実装でプロトタイプ OO の必要な機能を見落としていませんか? 変更が必要な Javascript の規則や相互作用はありますか? 要約すると、ここでの「落とし穴」は何ですか? また、明らかな改善点はありますか?
コンストラクターの定義を DRYer にしたかったのですが、関数の name プロパティが書き込み可能ではないことがわかりました。これが、WebKit Inspector のオブジェクト名をサポートする理由です。私は自分が望んでいたことを達成するために評価を構築することができましたが、... うーん。
javascript - Javascript object.create および isPrototypeOf
object.create と、コンストラクターのnew
キーワードの使用を避けてそれを使用する最善の方法を理解しようとしています。これまでのところ、私は上記のように取り組んでいます (おそらく最良の方法ではなく、試行錯誤です) - 使用すると、オブジェクト型をチェックしてオブジェクト タイプobject.create
をチェックできなくなりましたinstanceof
。
誰かが isPrototypeOf を使用してチェックすることを提案しました-チェックfalse
時に上記のコードが返されるので、何か間違っています。
私が間違っているところを説明してくれる人はいますか?私はまだJavaScriptのプロトタイプ継承に慣れていません。
javascript - Object.create を使用して作成された JavaScript プロパティの get/set メソッドへのアクセス
私が望むのは、JavaScript プロパティをラップして get/set の動作を変更できる機能です。
値であるプロパティの場合、次のことができます。
しかし、myPropertyが既に getter/setter を持っている場合はどうなるでしょうか?
myProperty匿名セッターを検出して、 notifyOfChange で呼び出せるようにする方法はありますか?
注: notifyOfChange を任意のオブジェクトで機能させたいので、myPropertyセッターに名前付き関数を使用するだけでは機能しません。
javascript - Javascript プライベート変数 + Object.create (クロージャー変数への参照)
clojure を使用して JavaScript でプライベート変数を作成する方法を知りたいと思っていました。ただし、 Object.createを使用する場合はクローンを作成してください。
http://ejohn.org/blog/ecmascript-5-objects-and-properties/からこの手法を取得しましたが、クロージャー変数がすべてのオブジェクトで同じであるというこの制限がありました。JavaScriptでのこの動作が想定されていることは知っていますが、真のプライベート変数を作成するにはどうすればよいですか?
javascript - Crockford の Object.create shim を理解する
私はプロトタイプの上書きを防ぐための Crockford shim を読んでいて、それが最終的な解決策ではないことを理解しています。また、 ES5 Shimがこれに代わる実行可能な代替手段になる可能性があることも理解しています。また、より堅牢で安全な代替手段を提供するこの投稿も読みました。
Object.create
それでも、彼のシムが何を「言っている」のか、そして「何をしているのか」を知りたい. 私の説明コメントが正しいかどうか誰か教えてもらえますか?
このようにして、「another_stooge」に追加するときに「stooge」オブジェクトのプロトタイプを上書きすることはできません。「constructor」を使用して「stooge」プロトタイプをリセットする必要はありません。
前もって感謝します、
-k
javascript - Object.create がプライベート変数を静的にするのはなぜですか?
コードはここで遊ぶことができます - http://jsfiddle.net/dsjbirch/zgweW/14/
これは基本的に、クロックフォードのプライベート変数の説明をそのままコピーして貼り付けたものです。
Object.create()
少しトレースを追加しました。
2 番目のオブジェクトが最初のオブジェクトのプライベート メンバーを共有するのはなぜですか? この状況を回避しながら使用を続けるにはどうすればよいですかObject.create()
http://jsfiddle.net/dsjbirch/zgweW/14/
私は見ることを期待します
しかし、実際には 2 番目のオブジェクトの出力はすべて null です。
そのため、オブジェクトのメンバーsecond
を共有していると結論付けています。first
secret
javascript - Object.create プロトタイプチェーン
最初の質問
昨日、ECMAScript 5 Object.create() について読みました。そして、プロトタイプとそのコンストラクターを設定する代わりに、このメソッドを使用してコード内にプロトタイプ チェーンの構築を開始したかったのです。書き込み可能で構成可能なものなどを直接設定できるのが気に入っています。
こんな感じでやってみた
- で指定されたメソッド
Human
は、RAM に 1 回しか存在しませんか? そしてHuman1.walk()
それを指す? - これは、このようにする正しいアプローチなのだろうか?私はJavaScriptに比較的慣れていません。
これはjsfiddleのコードです。
答え
まず第一に、物事をより明確にすることがたくさんあります=)しかし、1:私がこのようにすると、インスタンスはコンストラクターのプロトタイプから継承します(?)
2: したがって、 instanceof 演算子はこの Code で壊れません (関数に対してのみ機能することは私には明らかです)
しかし、このように書いても、Paul は依然として Top のプロトタイプから inherit() メソッドを継承しており、それを上書きする必要があります。
そして、Objkect.defineproperty (?) を使用しない限り、wrtable のようなプロパティ記述子を設定できません。
Object.create() を使用して Objects から継承することと、プロトタイプとコンストラクターを設定することの主な利点は何ですか? =)
3: ああ thx、はい、それは基本オブジェクトの拡張ではありません =) 提案のための thx =)
すべての努力のためのThx =)
答え
わかりましたので、私がそうするとき
なし = {}
base.prototype = なし;
これは Object.prototype までプロトタイプチェーンを上ることを妨げませんか? そうでない場合、これを行う方法はありますか? =) ( Object.create(null); ) はこれを行いますか?
そして、私は設定しなければならないと思った
base.prototype.constructor = ベース;
そうでなければ、のプロトタイプコンストラクター
var Top = new base();
プロトタイプが Nothing に設定されている場合、Nothings になるか、プロトタイプ チェーンのどこかからコンストラクターを基本継承しません ->
baseof のトップ インスタンス // false
アップデート
私は今、このような方法でそれをやった:
誰かが気にかけている場合でも
、jsfiddle はこれを実行しません。Titanium は、おそらくいくつかの厳密なモード (??) を期待どおりに実行します。
javascript - JavaScript 継承 Object.create
OK、Web アプリケーションの巨大なフォームに加えられた変更を追跡しようとしています。ページが読み込まれると、すべての入力フィールド (選択、ラジオ ボタン、チェックボックスなど) の初期状態を「キャプチャ」する JS オブジェクトを作成します。
ユーザーが文字通り何百もの入力要素のいずれかの値を変更すると、新しい値が 2 番目のオブジェクトで追跡されます。ユーザーが をクリックするUpdate
と、これら 2 つのオブジェクトが比較され、変更された値のみが送信され、それに応じてデータが更新されます。
2 つの完全に別個のオブジェクトを構築するのではなく、継承を使用する方が賢明だと考えました。
物事が進むにつれて、tracker
オブジェクトは次のようになります。
FF と chrome でこのオブジェクトを呼び出すJSON.stringify
と、すべて問題なく、オブジェクト自体のプロパティのみが返されます。IE ではそうではありません: トラッカーにはプロパティがないため、継承チェーンではなくコピーを作成prototype
するように見えますか? true を返しますが、false と評価されます。実際、プロパティは未定義です。Object.create
tracker.__proto__ === initialState
tracker.prototype === initialState
tracker.prototype
質問 1: IE で継承チェーンをセットアップして、変更されていないプロトタイプ値を剥がすことができる別の方法はありますか?
質問 2:ネストされたオブジェクトを可能にする継承チェーンを設定する方法も、可能な場合は希望します。現在、ネストされたオブジェクトは、再帰関数を使用してメインオブジェクトを反復処理することで処理されます。それは私が省略しようとしているものなので、ちょっとばかげています。
要するに:
これがそこにあるかどうか知りたい:
いつものように: jQuery タグがないということは、jQuery がない
ことを意味します 注: IE とは、IE9 ではなく、巨大な IE8 を意味します (悲しいことに、会社のポリシー)
javascript - JavaScript の Object.create メソッド
JavaScriptの初心者なので、ここから Object.create() メソッドを理解しようとしました
https://developer-new.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
コード例の 18 行目。writable が true に設定されたアクセサ プロパティが作成されます。また、書き込み可能はデータ記述子専用であることも読みました。
走ってみたり、
私は得るinvalid property error
。