JS進級編--JSアプリの巧みな使い方とObject.definePropertyの使用に拡張します.
8320 ワード
Math.maxは、配列の中で最大の項目を得ることを実現します.
Math.min実現は配列の中で一番小さい項目を得ることができます.
Object.definePropertyの使用
オブジェクトは、複数の名前/値ペアからなる無秩序な集合です.オブジェクトの各属性は、任意の種類の値に対応します.オブジェクトを定義するには、構造関数または字面の量の形式が使えます.
Object.defineProperty()の説明
文法: obj:必要です.ターゲット prop:必要です.定義または変更が必要な属性の名前 descriptor:必要です.ターゲット属性が持つ特性 戻り値:は、関数の対象に入る.すなわち、最初のパラメータobj 属性に対して、読み取り専用か書き込み不可かなどの特性を設定できます.
オブジェクトの属性に特性記述を追加し、現在は2つの形態が提供されています.データ記述とアクセサ記述です.
データの説明
オブジェクトの属性を変更または定義する場合、この属性にいくつかの特性を追加します.
value
属性に対応する値は、任意の種類の値をデフォルトでundefinedとすることができます.
この属性は2つの役割を果たします.ターゲット属性はdeleteを使用して を削除できますか?ターゲット属性は、再度特性 を設定することができるかどうか. value:属性を設定する値 writable:値は書き換えられますか?true false enumerable:ターゲット属性は列挙されてもいいですか?true false configrable:ターゲット属性が削除されるかどうか、または特性true false を再度変更することができますか?
アクセサの説明
アクセサを使用して属性の特性を記述すると、以下の特性属性を設定できます.
getter/setter
オブジェクトの属性の値を設定または取得すると、getter/setterメソッドが提供されます. getterは、属性値を取得する方法 である. setterは属性値を設定する方法である. 特性にget/set属性を用いて対応する方法を定義した.
Object.definePropertyを通じて一つのオブジェクトのある属性に複数の方法を追加する.
互換性
ie 8の下ではDOMオブジェクトのみを使用し、元のオブジェクトに
参照
Object.defineProperty()
関連してリンクを読みます:《JS基礎編--JSの中の列挙可能な属性と列挙できない属性と拡張》
var array = [1,2,3,4,5];
var max = Math.max.apply(null, array);
console.log(max); // 5
呼び出し時に最初のパラメータがnullに与えられました.これはオブジェクトが呼び出されていないので、この方法で演算を助けて、戻った結果を得るだけでいいです.Math.min実現は配列の中で一番小さい項目を得ることができます.
var array = [1,2,3,4,5];
var min= Math.min.apply(null, array);
console.log(min); // 1
奋菚荪は、元のオブジェクトにmaxとminの方法を追加すると、元のオブジェクト方法Object.defineProperty()
を使用して、直接にオブジェクトに新しい属性を定義したり、オブジェクトの既存の属性を修正したりして、このオブジェクトに戻ります.Object.defineProperty(Array.prototype, 'max', {
writable: false,
enumerable: false,
configurable: true,
value: function () {
return Math.max.apply(null, this);
}
});
Object.defineProperty(Array.prototype, 'min', {
writable: false,
enumerable: false,
configurable: true,
value: function () {
return Math.min.apply(null, this);
}
});
直接に配列上で呼び出してもいいです.var arr = [54,545,2165,545,56];
console.log(arr.max()); //2165
console.log(arr.min()); //54
上記はObject.definePropertyの方法について述べました.Object.definePropertyの使用
オブジェクトは、複数の名前/値ペアからなる無秩序な集合です.オブジェクトの各属性は、任意の種類の値に対応します.オブジェクトを定義するには、構造関数または字面の量の形式が使えます.
var obj = new Object; //obj = {}
obj.name = " "; //
obj.say = function(){}; //
上記の属性を追加する方法に加えて、Object.defineProperty
を使用して新しい属性を定義したり、既存の属性を変更したりすることもできます.Object.defineProperty()の説明
文法:
Object.defineProperty(obj, prop, descriptor)
パラメータの説明:for..in
またはObject.keys()
によって巡回することができるかどうか.オブジェクトの属性に特性記述を追加し、現在は2つの形態が提供されています.データ記述とアクセサ記述です.
データの説明
オブジェクトの属性を変更または定義する場合、この属性にいくつかの特性を追加します.
var obj = {
test:"hello"
}
//
Object.defineProperty(obj,"test",{
configurable:true | false,
enumerable:true | false,
value: ,
writable:true | false
});
//
Object.defineProperty(obj,"newKey",{
configurable:true | false,
enumerable:true | false,
value: ,
writable:true | false
});
データ記述の属性は任意です.各属性を設定する役割を見てください.value
属性に対応する値は、任意の種類の値をデフォルトでundefinedとすることができます.
var obj = {}
// : value
Object.defineProperty(obj,"newKey",{
});
console.log( obj.newKey ); //undefined
------------------------------
// : value
Object.defineProperty(obj,"newKey",{
value:"hello"
});
console.log( obj.newKey ); //hello
璣菗萼落リテーブル属性の値は書き換えられますか?trueに設定して書き換えられます.falseに設定します.書き換えられません.デフォルトはfalseですvar obj = {}
// :writable false, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false
});
// newKey
obj.newKey = "change value";
console.log( obj.newKey ); //hello
// :writable true,
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:true
});
// newKey
obj.newKey = "change value";
console.log( obj.newKey ); //change value
この属性は列挙されますか?trueに設定して列挙できます.falseに設定します.列挙できません.デフォルトはfalseですvar obj = {}
// :enumerable false, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:false
});
//
for( var attr in obj ){
console.log( attr );
}
// :enumerable true, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:true
});
//
for( var attr in obj ){
console.log( attr ); //newKey
}
(i)configrableは、ターゲット属性を削除することができますか?または属性の特性を再度修正することができますか?trueに設定して、特性を削除または再設定できます.falseに設定します.特性は削除できませんか?再設定できません.デフォルトはfalseですこの属性は2つの役割を果たします.
//----------------- ------------------------
var obj = {}
// :configurable false, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:false,
configurable:false
});
//
delete obj.newKey;
console.log( obj.newKey ); //hello
// :configurable true, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:false,
configurable:true
});
//
delete obj.newKey;
console.log( obj.newKey ); //undefined
//----------------- ------------------------
var obj = {}
// :configurable false, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:false,
configurable:false
});
//
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:true,
enumerable:true,
configurable:true
});
console.log( obj.newKey ); // :Uncaught TypeError: Cannot redefine property: newKey
// :configurable true, 。
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:false,
enumerable:false,
configurable:true
});
//
Object.defineProperty(obj,"newKey",{
value:"hello",
writable:true,
enumerable:true,
configurable:true
});
console.log( obj.newKey ); //hello
新規に定義された属性設定特性以外に、既存の属性設定特性を与えることもできます.// , 、 、 。
var obj = {
test:"hello"
}
//
obj.test = 'change value';
console.log( obj.test ); //'change value'
Object.defineProperty(obj,"test",{
writable:false
})
//
obj.test = 'change value again';
console.log( obj.test ); // :'change value'
>ヒント:Object.defineProperty
を使用してオブジェクトに属性を追加すると、属性の特性が設定されていない場合、configurable
、enumerable
、writable
の値はすべてデフォルトのfalse
です.var obj = {};
// , configurable,enumerable,writable false
// newkey 、 、
//
Object.defineProperty(obj,'newKey',{
});
//
obj.newKey = 'hello';
console.log(obj.newKey); //undefined
//
for( var attr in obj ){
console.log(attr);
}
設定の特性まとめ:アクセサの説明
アクセサを使用して属性の特性を記述すると、以下の特性属性を設定できます.
var obj = {};
Object.defineProperty(obj,"newKey",{
get:function (){} | undefined,
set:function (value){} | undefined
configurable: true | false
enumerable: true | false
});
>注意:ゲッターまたはセッター方法を使用した場合は、writableとvalueの2つの属性は使用できません.getter/setter
オブジェクトの属性の値を設定または取得すると、getter/setterメソッドが提供されます.
var obj = {};
var initValue = 'hello';
Object.defineProperty(obj,"newKey",{
get:function (){
//
return initValue;
},
set:function (value){
// , value
initValue = value;
}
});
//
console.log( obj.newKey ); //hello
//
obj.newKey = 'change value';
console.log( obj.newKey ); //change value
>getまたはsetはペアで出現しなければならず、その一つを書き込めばいいです.メソッドが設定されていない場合、getとsetのデフォルト値はundefinedです.Object.definePropertyを通じて一つのオブジェクトのある属性に複数の方法を追加する.
var obj = {};
Object.defineProperty(obj,'atrr',{
get:function(){
var self = this;
var num = 0;
return {
add:function(value){
return num + value;
},
reduce:function(value){
return num - value;
}
}
}
});
console.log(obj.atrr.add(5)); //5
console.log(obj.atrr.add(8)); //8
console.log(obj.atrr.reduce(8)); //-8
説明:objオブジェクトのarrオブジェクトに2つの方法addとreduceを追加しました.互換性
ie 8の下ではDOMオブジェクトのみを使用し、元のオブジェクトに
Object.defineProperty()
を使用するとエラーが発生するように試みる.参照
Object.defineProperty()
関連してリンクを読みます:《JS基礎編--JSの中の列挙可能な属性と列挙できない属性と拡張》