ホームページ >ウェブフロントエンド >jsチュートリアル >ECMAScript5 のオブジェクト アクセサー プロパティ: getters および setters_javascript スキルの概要

ECMAScript5 のオブジェクト アクセサー プロパティ: getters および setters_javascript スキルの概要

WBOY
WBOYオリジナル
2016-05-16 16:28:161870ブラウズ

明らかに、これは IE (高度な IE を除く) とは関係のないトピックですが、興味のある学生は、ECMAScript5 標準のゲッターとセッターの実装について学ぶために集まってください。オブジェクトでは、プロパティまたはメソッドを操作するために最も一般的に使用されるメソッドは読み取り (参照) と書き込みです。たとえば、o.get は読み取り操作であり、o.set = 1 は書き込み操作です。実際、IE を除く最新の主流ブラウザの実装では、任意のオブジェクトのキー値をゲッター メソッドとセッター メソッドで置き換えることができます。これは「アクセサー属性」と呼ばれます。

ゲッターは値をクエリする役割を果たしますが、セッターは関数本体でキー値を設定する役割を果たします。すべての返品は無効です。通常の属性とは異なり、get または set のみを宣言するメモリ属性は読み取りと書き込みの両方を行うことはできません。同様に、getter メソッドのみを持つ場合は読み取り専用になります。同様に、getter メソッドのみがある場合は、setter メソッドのみが読み取られます。その場合、読み取られる内容は常に未定義になります。オブジェクトストレージのプロパティを宣言するにはどうすればよいですか? 最も速い方法は、オブジェクト リテラルの構文を使用して記述することです。次のコード部分を参照してください。

コードをコピーします コードは次のとおりです:
var oo = {
名前: 'Xianxin'、
セックスを取得(){
return 'man';
}
};
//明らかにこれは許可されていません。Xianxin は自分が男性であるという事実を外の世界に変えられたくないため、セックスに対してのみ読み取り専用関数を設定します
oo.sex = '女性';
console.log(oo.sex); //結果はやはり man

興味深いのは、これがこれまでの理解を覆すことです。つまり、メソッドを定義するときに function キーワードが使用されていないということです。実際、ここでの get または set は、包含側 (書き込み) と安全側 (読み取り) の 2 つの異なる状態の関数として理解できます。プレゼンテーションの伝統に従って、キーと値を区切るのにコロンを使用しません。したがって、上の例を続けてください。メモリ属性に基づいて読み取りと書き込みの両方を行うにはどうすればよいでしょうか? おそらく次の段落で答えが得られるでしょう:

コードをコピーします コードは次のとおりです:
var oo = {
名前: 'Xianxin'、
セックスを取得(){
If(this.sexx){
this.sexx を返す
}その他{
'男' を返します
}
}, set sex(val){
This.sexx = val
}
};
//ああ、彼はとても寛容なので、たとえ性別が変わっても受け入れてくれるでしょう
oo.sex = '女性';
console.log(oo.sex); //結果女性

おそらく、これは不要だと思われるかもしれません。get と set を完全に無視して、sex メソッドに 2 つのアクセス許可を直接持たせることができるからです。 ただし、get と set を分離する理由は、ECMAScript5 による JavaScript オブジェクトのキー値操作のより厳密な解釈をより明確に理解するためです。 もちろん、IE に汚染されている中国では、新しい主流テクノロジーは常に場違いに見えます。実際のプロジェクト開発では決して get と set を使用しないかもしれませんが、将来的には使用しないと誰が保証できますか?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。