オブジェクトとプロパティ名を指定して、そのプロパティがゲッターまたはセッターのいずれかを使用して定義されているか、それとも完全に透過的かを判断することは可能ですか?プロパティにまだ定義されていない場合にのみ、getter/setterを定義します。
WebKit/Firefoxで動作させるために必要です。
getOwnPropertyDescriptor
をお探しですか? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor(obj, prop)
を使用できます
例えば:
var obj = { first: 1 }
obj.__defineGetter__('second', function() { return 2; });
// get descriptors
var descriptor1 = Object.getOwnPropertyDescriptor(obj, 'first');
var descriptor2 = Object.getOwnPropertyDescriptor(obj, 'second');
// check if it's a getter
descriptor2.get
// returns function () { return 2; }
descriptor1.get
// returns undefined
Object.getOwnPropertyDescriptor(obj、prop) を使用できます。
function isGetter (obj, prop) {
return !!Object.getOwnPropertyDescriptor(obj, prop)['get']
}
使用法:
obj = {
foo: 'foo',
get bar() { return 'bar' }
}
isGetter(obj, 'bar') // will return true
isGetter(obj, 'foo') // will return false
Javaスクリプト要件のサンプルオブジェクトテンプレートを見つけます。
var Man=function(n,a){
var name,age;
function getName(){
return this.name;
}
function getAge(){
return this.age;
}
function create(){
this.name=n;
this.age=a;
console.log('new object created');
}
function setAge(age){
this.age=age;
}
function setName(name){
this.name=name;
}
return{
name:n,
age:a,
getName:getName,
getAge:getAge,
setName:setName,
setAge:setAge
};
}
var m1=new Man('Chaiguy',30);
// To check if Property exist for an Object
console.log(m1.hasOwnProperty('name'));
// To get the name and age of the object
console.log(m1.getName()+' is '+m1.getAge()+' years old.');
Object.defineProperty's
get
またはset
メソッドのデフォルト値は、記述子で定義されていない場合、未定義になります。これは、識別するための理想的な方法です。
例を挙げましょう:
var User = {};
Object.defineProperty(User, 'name', {
get: function () {
return _name;
},
enumerable: true
});
Object.defineProperty(User, 'designation', {
get: function () {
return _designation;
},
set: function (val) {
_designation = val;
},
enumerable: true
});
var d = Object.getOwnPropertyDescriptor(User, 'name');
console.log(d.set == undefined);