仅允许某些类型的属性

时间:2014-03-26 20:39:18

标签: javascript object properties

function Dude() {
    this.firstName = '';
    this.lastName = '';
};

var d = new Dude();
d.firstName = 'Ok mr';
d.firstName = 100;

如何防止/保护100分配给firstName以便它始终是一个字符串?分配数字,数组另一个对象应转换为字符串。

2 个答案:

答案 0 :(得分:2)

尝试将变量设为私有,并为它们编写getter和setter。在setter中,您可以检查正确的类型。请参阅this answer以查看类型。

function Dude() {
    var firstName = '';
    var lastName = '';

    this.setFirstName = function(name) {
        if(typeof name == 'string' || name instanceof String) {
            firstName = name;
        }
    }
    this.getFirstName = function() {
        return firstName;
    }
};

var d = new Dude();
d.setFirstName('Ok mr');
d.setFirstName(100);

console.log(d.getFirstName()); // returns "Ok mr"

但请注意:当您使用输入元素的值或在引号中传递名称时,它将是一个字符串。无论它是否代表一个数字。

参考:http://javascript.crockford.com/private.html

答案 1 :(得分:0)

function Dude() {
   this.firstName = '';
   this.lastName = '';

   Dude.prototype.setFirstName(name) = function() {
      if(typeof name != "string") this.firstName = name.toString();
      else this.firstName = name;
   };

   Dude.prototype.setLastName(name) = function() {
      if(typeof name != "string") this.lastName = name.toString();
      else this.lastName = name;
   };
}

var d = new Dude();
d.setFirstName("name");
d.setLastName(100);

这些函数检查名称是否为字符串,如果不是,则名称将转换为字符串。这意味着它将作为字符串分配给firstName或lastName。