是否有可能,给定一个对象和属性名称来确定该属性是使用 getter 还是 setter 定义的,还是完全透明的?如果属性上还没有定义 getter/setter,我只想定义一个 getter/setter。
我需要它在 WebKit/Firefox 中工作。
是否有可能,给定一个对象和属性名称来确定该属性是使用 getter 还是 setter 定义的,还是完全透明的?如果属性上还没有定义 getter/setter,我只想定义一个 getter/setter。
我需要它在 WebKit/Firefox 中工作。
我想你在找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
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);
参考:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
为您的 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.');