JavaScript 对象.将可能的条目限制为两个

javascript object.. Limit possible entries to two?

本文关键字:两个 对象 JavaScript      更新时间:2023-09-26

在类中,我需要做一些JavaScript。我有一个任务,要制作一个小脚本,在那里我制作一个对象。我现在的问题是我需要限制对象的属性的可能值。这是我的代码:

var StudentObject = new Object();
var StudentStatus = new Object();
StudentStatus ={
   betaald:true,
   inschrijvingOK:true
}
StudentObject = {
   status: StudentStatus,
   traject: "",
   opleiding:"Toegepaste Informatica"
} 

在对象"StudentObject"中,您会看到一个属性"traject"。这应该只能包含"MBT"或"PBT"。有没有简单的方法?

提前谢谢。

无法

限制 javascript 中的公共对象属性可以包含哪些值,因为您已经定义了它。

您可以使用用于获取和设置值的访问器方法代替属性本身,这些方法只能强制实施某些值。 然后,您可以将实际数据存储在外部世界无法访问的闭包中,以便只有访问者才能访问它。 如果要将访问器与私有存储一起使用,请参阅 http://javascript.crockford.com/private.html,了解实现私有实例变量的方法。

function StudentObject(studentStatus, opleiding) {
   // private instance variable, only available to code defined
   // in the constructor
   var traject = "";
   // public methods
   this.setTraject = function(val) {
       if (val === "MBT" || val === "PBT") {
           traject = val;
       }
   }
   this.getTraject = function() {
       return traject;
   }
   this.status = studentStatus;
   this.opleiding = opleiding;
}
var studentStatus = {
    betaald:true,
    inschrijvingOK:true
}
var student = new StudentObject(studentStatus, "Toegepaste Informatica");
student.setTraject("PBT");
alert(student.getTraject());    // "PBT"
student.setTraject("xxx");
alert(student.getTraject());    // "PBT"

你也许可以做到:

traject:function(x){(x=='MBT'||x=='PBT')?return x:return null;}

没有简单的方法可以做到这一点:(

您可能需要检查设置和新增功能和Object.defineProperty

法典:

function StudentObject() {
    var _traject = undefined;
    Object.defineProperties(this, {
        traject: {
            enumerable: true,
            configurable: true,
            get: function () {
                return _traject;
            },
            set: function (value) {
                if ((typeof (value) === "string") && (value.indexOf("MBT") >= 0 || value.indexOf("PBT") >= 0)) {
                    _traject = value;
                }
            }
        }
    });
}

var s = new StudentObject();
s.traject = "foobar"; // won't set traject to foobar
console.log(s.traject); // undefined
s.traject = "someTextContainsMBT"; // will set traject
console.log(s.traject); // someTextContainsMBT