[解決済み] "new "の代わりに "Object.create "を使用する。
質問
Javascript 1.9.3 / ECMAScript 5 を導入しました。
Object.create
であり、特にDouglas Crockfordが
提唱
を長い間使ってきました。どのように
new
を以下のコードに置き換えます。
Object.create
?
var UserA = function(nameParam) {
this.id = MY_GLOBAL.nextId();
this.name = nameParam;
}
UserA.prototype.sayHello = function() {
console.log('Hello '+ this.name);
}
var bob = new UserA('bob');
bob.sayHello();
(想定
MY_GLOBAL.nextId
が存在する)。
私が思いつくのは
var userB = {
init: function(nameParam) {
this.id = MY_GLOBAL.nextId();
this.name = nameParam;
},
sayHello: function() {
console.log('Hello '+ this.name);
}
};
var bob = Object.create(userB);
bob.init('Bob');
bob.sayHello();
メリットはなさそうなので、得策ではないのかなと思います。新古典主義的になりすぎているのかもしれませんね。をどう使えばいいのでしょうか?
Object.create
を使用して、ユーザー 'bob' を作成できますか?
解決方法は?
1レベルしか継承していないため、この例では
Object.create
.
このメソッドを使用すると、簡単に ディファレンシャルインテリジェンス この場合、オブジェクトは他のオブジェクトを直接継承することができます。
あなたの
userB
の例では、あなたの
init
メソッドはパブリックであるべきであり、存在すらしてはならない、もし既存のオブジェクトインスタンスでこのメソッドを再度呼び出すと
id
と
name
プロパティが変更されます。
Object.create
は、第2引数を用いてオブジェクトのプロパティを初期化することができます。
var userB = {
sayHello: function() {
console.log('Hello '+ this.name);
}
};
var bob = Object.create(userB, {
'id' : {
value: MY_GLOBAL.nextId(),
enumerable:true // writable:false, configurable(deletable):false by default
},
'name': {
value: 'Bob',
enumerable: true
}
});
ご覧の通り、プロパティは第2引数の
Object.create
で使用される構文と同様の構文を使用したオブジェクト リテラルを使用します。
Object.defineProperties
と
Object.defineProperty
メソッドを使用します。
これは、プロパティの属性を設定することができます (
enumerable
,
writable
または
configurable
を使用すると、本当に便利です。
関連
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] URLを新しいタブで開く(新しいウィンドウではない)
-
[解決済み] JavaScriptでドロップダウンリストの選択値を取得する
-
[解決済み] JavaScriptで配列の先頭に新しい配列要素を追加するにはどうすればよいですか?
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] オブジェクトのためのマップ関数(配列の代わりに)
-
[解決済み] 型名の後の括弧は、newで違いがあるのでしょうか?
-
[解決済み] Object.create()とnew SomeFunction()の違いを理解する
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vueの補間表現とv-textディレクティブの違いについて
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】React-Redux: アクションはプレーンオブジェクトでなければならない。非同期アクションにはカスタムミドルウェアを使用する
-
[解決済み】React Uncaught Error: 対象コンテナが DOM 要素でない [重複]。
-
JavaScriptのStringに関する共通メソッド
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
[解決済み] JavaScriptの「new」キーワードとは何ですか?
-
[解決済み] JavaScriptの「bind」メソッドの使い方を教えてください。
-
[解決済み] Object.create()とnew SomeFunction()の違いを理解する