Ответ 1
Я думаю, что вы ищете getOwnPropertyDescriptor
? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
Возможно ли, если задано имя объекта и свойства, чтобы определить, определено ли это свойство с использованием либо геттера, либо сеттера, либо полностью прозрачно? Я только хочу определить 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 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 Script:
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
Значение по умолчанию метода будет undefined, если оно не определено в дескрипторе. Это идеальный способ идентификации.
Скажем, пример:
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);