函数中的getter和Setter(javascript)

时间:2016-07-14 06:51:38

标签: javascript function getter-setter

使用" get"在像这样的对象中,"得到"工作原理:



    var people = {
      name: "Alex",
      get sayHi() {
        return `Hi, ${this.name}!`
        }
    };

var person = people;

document.write(person.sayHi);




但是使用函数我会收到错误。如何在这样的函数中使用Getters和Setter?



function People2() {
  this.name = "Mike";
  get sayHi() {
    return `Hi, ${this.name}!`;
  }
};

var user = new People2();

document.write(user.sayHi);




4 个答案:

答案 0 :(得分:8)

您只能在课程(ES2015)和对象文字中使用实际的getset关键字。

ECMAScript 5

在ES5中,您通常会使用Obect.defineProperty来实现您尝试实现的目标:

function People2() {
    this.name = "Mike";
}
Object.defineProperty(People2.prototype, "sayHi", {
    get: function() {
        return "Hi, " + this.name + "!";
    }
});

ECMAScript 2015

在ES2015中,您还可以使用类来实现所需的行为:

class People2 {
    constructor() {
        this.name = "Mike";
    }
    get sayHi() {
        return `Hi, ${this.name}!`;
    }
}

答案 1 :(得分:1)

你可以试试这个

<script>
function People2(name) {
  this.name = name;  
};

People2.prototype = {
  get sayHi() {
    return `Hi, ${this.name}!`;}
};

var user = new People2('Alex');

document.write(user.sayHi);
</script>

或者这个......

<script>
function people(name) {
    this.name = name;
};

Object.defineProperty(people.prototype, 'sayHi', {
    get: function() { return `Hi, ${this.name}!`; }
});

var person = new people('Alex');

document.write(person.sayHi);
</script>

答案 2 :(得分:0)

如果您想为具有更多控制权的函数定义类似 name 的属性,我们可以对函数本身使用 Object.defineProperty,如下所示:

function people(name) {

    //this.name = name; //this can be modified freely by caller code! we don't have any control

    var _name = name; //use a private var to store input `name`
    Object.defineProperty(this, 'name', {
        get: function() { return _name; },  //we can also use `return name;` if we don't use `name` input param for other purposes in our code
        writable: false, //if we need it to be read-only
        //... other configs
    });

};

var person = new people('Alex');
console.log(person.name); //writes Alex

答案 3 :(得分:-1)

例如,使用此:

function People2() {
  this.name = "Mike";
  this.__defineGetter__("sayHi", function() {
    return `Hi, ${this.name}!`;
  });
};