javascript-是否可以为Node.JS对象创建“写入前”代理?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-是否可以为Node.JS对象创建“写入前”代理?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2136字,纯文字阅读大概需要4分钟。
内容图文
![javascript-是否可以为Node.JS对象创建“写入前”代理?](/upload/InfoBanner/zyjiaocheng/668/5cb0673949cf4d1eb25add2b28d5b132.jpg)
给定一个像这样的对象:
var box = { number: 20 }
我想将其“写之前”设置为Proxy(或等效值).该代理将充当中间件并执行类型检查.
例如,在执行box.number =“ 30”之后,它将验证typeof ===“ number”.由于不是,它将显示错误.
执行box.number = 30不会触发代理.
我尝试过的
>This.仅适用于未定义的属性.
> Watcher.JS将值写入,然后执行中间件(因为它是观察者).中间件应首先执行.
我知道可以做到的:
>我知道我可以简单地事先检查变量的类型.我正在寻找代理解决方案.
>自定义功能(getter和setter).我想尝试代理,所有属性都有动态名称.
解决方法:
我认为,考虑到您的需求,获取/设置是一种更好的方法,它们执行时间更快,并且代码更易于维护.
邮件/邮件解决方案
自从ES5到来以来,周围都是…
- A getter is a method that gets the value of a specific property.
- A setter is a method that sets the value of a specific property.
You can define getters and setters on any predefined core object or
user-defined object that supports the addition of new properties. The
syntax for defining getters and setters uses the object literal
syntax.
信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects
var box = {
_number : 0,
get number(){ return this._number },
set number(value){
/* your verifications here */
if( typeof value !== 'number' ) throw new Error('Invalid input')
/* if validates , asign value */
this._number = value;
}
}
// test...
box.number = "1234"; // FAIL
box.number = 1234; // OK
box.number; // output = 1234
代理解决方案
自ES6起可用.如果性能对您很重要,则可能不合适.使用GET / SET代理陷阱,可以获得与上一个示例相同的行为.
// your original object...
var box = {};
// create a proxy linked to your original object
var boxProxy = new Proxy( box , {
get( obj, prop, receiver ){ return obj[prop] },
set( obj, prop, value){
/* check if the property trying to be written is 'number' */
if( prop === 'number' ){
/* your verifications here */
if( typeof value !== 'number' ) throw new Error('Invalid input')
/* if validates , asign value */
this._number = value;
}
}
});
// test...
boxProxy.number = "1234"; // FAIL
boxProxy.number = 1234; // OK
boxProxy.number; // output = 1234
在这两种情况下,如果都需要将property box._number设为私有和隐藏,则可以使用closures来实现.
内容总结
以上是互联网集市为您收集整理的javascript-是否可以为Node.JS对象创建“写入前”代理?全部内容,希望文章能够帮你解决javascript-是否可以为Node.JS对象创建“写入前”代理?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。