只允许某些类型的属性

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

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

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


尽量让这些变量保密,并为它们写getter和setter。 在setter中,您可以检查正确的类型。 看到这个答案检查类型。

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


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。

链接地址: http://www.djcxy.com/p/94991.html

上一篇: Only allow certain types for properties

下一篇: redirect knockout js observable if containing string