确定 JavaScript 属性是否定义了 getter 或 setter?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8591873/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Determine if a JavaScript property has a getter or setter defined?
提问by devios1
Is it possible, given an object and property name to determine if that property is defined using either a getter or setter, or is it completely transparent? I only want to define a getter/setter if there is not already one defined on the property.
是否有可能,给定一个对象和属性名称来确定该属性是使用 getter 还是 setter 定义的,还是完全透明的?如果属性上还没有定义 getter/setter,我只想定义一个 getter/setter。
I need it to work in WebKit/Firefox.
我需要它在 WebKit/Firefox 中工作。
回答by Graham
I think you're looking for getOwnPropertyDescriptor
? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
我想你在找getOwnPropertyDescriptor
?https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor
回答by Jim Schubert
You can use Object.getOwnPropertyDescriptor(obj, prop)
您可以使用 Object.getOwnPropertyDescriptor(obj, prop)
For example:
例如:
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
回答by Eloy Pineda
You can use Object.getOwnPropertyDescriptor(obj, prop).
您可以使用Object.getOwnPropertyDescriptor(obj, prop)。
function isGetter (obj, prop) {
return !!Object.getOwnPropertyDescriptor(obj, prop)['get']
}
Usage:
用法:
obj = {
foo: 'foo',
get bar() { return 'bar' }
}
isGetter(obj, 'bar') // will return true
isGetter(obj, 'foo') // will return false
回答by Umesh Patil
Find the sample Object template for your java Script requirement:
为您的 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.');
回答by Venkat.R
Object.defineProperty's
get
orset
Method default value will be undefined if its not defined in the descriptor. This is ideal way to identify.
Object.defineProperty's
get
或set
如果未在描述符中定义,则方法默认值将是未定义的。这是理想的识别方式。
Let's say example:
举个例子:
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