javascriptジャンプ式前進(4)-対象基礎理論
5625 ワード
前言
ECMAScriptの中で非常に重要だと思います.対象に対する理解は個人的にはまだ十分ではないです.だから、この文章はそれほど深くなくて、表層の知識を比較するだけです.
オブジェクト指向とは
対象に向かう定義は比較的に良い比喩で、例えば一人で、どんな特徴があって、これは特徴が対象の属性で、異なった人のまた同じところと自身のスポットライトです.このように単一の対象から継承、拡張に移行します.【注:ES 6以前は類がなかったという説がありますが、原生の継承もありません.シミュレーションが多いです.】
ECMAの定義は、「無秩序属性の幾何学的性質は、基本値、オブジェクトまたは関数を含むことができます.」
JSでは、声明の対象となる方法には、声明と文字の量があります.
属性の種類
ECMAScriptには2つの属性があります.データ属性とアクセス属性です.
データ属性は4つの挙動特性があります.1.[Configrable]:trueに設定すれば、deleteで属性を削除できます.falseなら、いけません!!デフォルトはtrueです2.[[Enumerable]:for-innのようなサイクルは属性値を巡回することができますか?デフォルトはtrueです.3.[[Writable]:オブジェクトの属性値を変更することを許可するかどうか、デフォルトはtrueです.4.[[Value]:オブジェクトの属性値、デフォルトはundefinedです.
オブジェクトの挙動特性を修正するには、
属性特性の読み取りには、
対象のいくつかの作成モードと継承の実現については、整理して、ついでにES 6の実現方法も織り込みます.吉音をお待ちしております.......
ECMAScriptの中で非常に重要だと思います.対象に対する理解は個人的にはまだ十分ではないです.だから、この文章はそれほど深くなくて、表層の知識を比較するだけです.
オブジェクト指向とは
対象に向かう定義は比較的に良い比喩で、例えば一人で、どんな特徴があって、これは特徴が対象の属性で、異なった人のまた同じところと自身のスポットライトです.このように単一の対象から継承、拡張に移行します.【注:ES 6以前は類がなかったという説がありますが、原生の継承もありません.シミュレーションが多いです.】
ECMAの定義は、「無秩序属性の幾何学的性質は、基本値、オブジェクトまたは関数を含むことができます.」
JSでは、声明の対象となる方法には、声明と文字の量があります.
var x = {}; //
vay y = new Object(); //
x.name = "crper" // Object {name: "crper"}
しかし、ES 5から始まって、仕様と定義がますます豊富になりました.ES 5の新しいバージョンを追加したり、古いバージョンを改善したりします.属性の種類
ECMAScriptには2つの属性があります.データ属性とアクセス属性です.
データ属性は4つの挙動特性があります.1.[Configrable]:trueに設定すれば、deleteで属性を削除できます.falseなら、いけません!!デフォルトはtrueです2.[[Enumerable]:for-innのようなサイクルは属性値を巡回することができますか?デフォルトはtrueです.3.[[Writable]:オブジェクトの属性値を変更することを許可するかどうか、デフォルトはtrueです.4.[[Value]:オブジェクトの属性値、デフォルトはundefinedです.
オブジェクトの挙動特性を修正するには、
Object.defineProperty
を用いて「定義対象属性としても理解できる」ことが必要であり、フォーマット:Object.defineProperty(obj,attribute,{ })
はデモを参照する. var x = {};
x.name = "crper";
/* , age ; ; writable ; configurable false , , ; ; , Object.defineProperty , ; , Object.defineProperty, , configurable[ ],enumerable[ ],writable[ ] false; */
Object.defineProperty(x,"age",{
writable:false,
configurable:false,
value:23
})
アクセス器の属性は4つの特性があります.1.[Configrable]:データの属性と一致します.2.[[Enumberbale]:データの属性とずっと;3.[[Get]:属性の読み込み時に関数を呼び出し、デフォルト値はundefinedとなります.4.[[Set]:属性値を書き込むときに関数を呼び出し、デフォルト値はundefinedとなります. /*getter setter , ; ES5 , getter, !!! <<JS >> */
var book = {
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function(){
return this._year;
},
set:function(newValue){
if(newValue > 2004){
this._year = newValue;
this.edition += newValue - 2004;
}
}
});
book.year = 2005;
console.log(book.edition); // 2
/* ,getter , ; setter , , */
複数の属性を定義 /* , defineProperty , */
var my = {};
Object.defineProperties(my,{
name:{
value:"crper"
},
age:{
value:23
},
read:{
get:function(){
return this.age;
},
set:function(value){
if(value > 24){
return this.age = (value - 24);
}
}
}
});
属性特性の読み込み属性特性の読み取りには、
Object,getOwnPropertyDescriptor(obj,attribute)
方法が使用され得る.戻り値は、データ属性とアクセス属性の次の例である.Object.getOwnPropertyDescriptor(my,"age") ; //Object {value: 23, writable: false, enumerable: false, configurable: false}
Object.getOwnPropertyDescriptor(my,"name"); //Object {value: "crper", writable: false, enumerable: false, configurable: false}
Object.getOwnPropertyDescriptor(my,"read"); //Object {enumerable: false, configurable: false}
オブジェクトを作成.... ...
締め括りをつける対象のいくつかの作成モードと継承の実現については、整理して、ついでにES 6の実現方法も織り込みます.吉音をお待ちしております.......