Determine if a JavaScript property has a getter or setter defined?

前端 未结 5 2044
刺人心
刺人心 2020-12-01 09:58

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 d

相关标签:
5条回答
  • 2020-12-01 10:46

    You can use 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
    
    0 讨论(0)
  • 2020-12-01 10:54

    Find the sample Object template for your java Script requirement:

    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.');
    
    0 讨论(0)
  • 2020-12-01 10:56

    I think you're looking for getOwnPropertyDescriptor? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor

    0 讨论(0)
  • 2020-12-01 11:03

    Object.defineProperty's get or set Method default value will be undefined if its not defined in the descriptor. This is ideal way to identify.

    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);
    

    Reference: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

    0 讨论(0)
  • 2020-12-01 11:04

    You can use 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
    
    0 讨论(0)
提交回复
热议问题