Determine if a JavaScript property has a getter or setter defined?
是否有可能给定对象和属性名称,以确定该属性是使用getter或setter定义的,还是完全透明的?我只想定义一个getter / setter(如果没有在属性上定义)。
我需要它才能在WebKit / Firefox中运行。
我认为您正在寻找
您可以使用
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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)。
1 2 3 | function isGetter (obj, prop) { return !!Object.getOwnPropertyDescriptor(obj, prop)['get'] } |
用法:
1 2 3 4 5 6 7 | obj = { foo: 'foo', get bar() { return 'bar' } } isGetter(obj, 'bar') // will return true isGetter(obj, 'foo') // will return false |
Object.defineProperty's get orset Method default value will be undefined if its not defined in the descriptor. This is ideal way to identify.
举个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
找到满足您的Java脚本要求的示例对象模板:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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.'); |