我可以使用一个函数来帮助分配和验证作为对象传递的属性吗
Can I have a function used to help assign and validate properties passed as an object?
我对JavaScript还很陌生,我想知道是否可以执行以下操作:
我有一个具有4个属性的对象,定义如下:
var Thing = new function(){
this.x = 0;
this.y = 0;
this.width = 0;
this.height = 0;
}
是否可以定义一个set方法,该方法将对象作为参数,找到匹配的属性并将其设置为给定值,如果该属性不是对象的成员,则抛出异常。
所以,如果我有一个例子:
var thing = new Thing();
然后
thing.set({width: 10});
将宽度设置为10,但
thing.set({radius: 5});
会引发异常。
这可能吗?如果是,我该如何实现这一点?
是的,您只需要在Thing原型上添加一个set
方法:
Thing.prototype.set = function(obj){
for(var attr in obj){
// make sure attribute is not inherited from prototype chain
if(obj.hasOwnProperty(attr)){
// ensure that Thing has this attribute
if(this.hasOwnProperty(attr)){
this[attr] = obj[attr];
} else {
throw new Error("Property doesn't exist");
}
}
}
}
此外,var blah = new function(){..}
应该只是var blah = function(){..}
您的第一个块有点奇怪,不应该在那里使用new
。此外,如果要使用分号,则应该保持一致,并将分号放在函数的右大括号后面,因为它是一个函数表达式。
至于你的实际问题,这确实是可能的。您可以扩展具有此功能的子类。。。
Subclass.prototype.set = function(properties) {
Object.keys(properties).forEach(function(key) {
if ( ! Object.hasOwnProperty.call(this, key)) {
throw Error("The target object doesn't have the key '" + key + "' defined.");
}
this[key] = properties[key];
});
};
然后你可以让Thing
的原型指向它。如果Thing
是你唯一想使用它的东西,只需将它分配给Thing.prototype
。
相关文章:
- 验证会话中是否存在对象's数组
- 验证对象是否为null Javascript/Angularjs
- 在页面对象文件中验证sendKeys结果会导致未定义的错误(Protractor)
- 在对象上迭代以验证它是否's键存在于数组中
- 类型错误:对象 #<对象> 没有方法“身份验证”
- 如何使用对象初始值设定项验证窗体
- Join验证对象数组,这样只有一个对象具有特定属性
- 使用正则表达式对象进行Javascript字符串验证
- 我可以使用一个函数来帮助分配和验证作为对象传递的属性吗
- JS 字段验证 - 循环遍历对象,每个字段有三个数据注意事项
- 如何验证是否使用 Selenium 在 javascript 对象上调用了某些方法
- Angular Js:验证表中的重复对象键
- 未捕获的类型错误:对象 [对象对象] 没有方法“验证引擎”
- 使用 Jquery 验证 JavaScript 对象是否为空
- Javascript OOP - 通过接口或原型验证对象的最佳实践
- 验证对象中是否存在深度属性
- 如何在jquery中验证对象
- Javascript表单验证对象
- AngularJS无法从解析函数中的服务中获取身份验证对象
- Meteor简单模式-当修饰符选项为true时,验证对象必须至少有一个运算符