当前位置: 首页 > news >正文

苏州seo建站自己如何做网站

苏州seo建站,自己如何做网站,高端女装品牌前十名,wordpress主题xiu不显示缩率图1. 什么是proxy代理 代理(Proxy)是 JavaScript 中一种非常强大而灵活的功能。代理允许你拦截并覆盖对象的默认行为,提供了一种拦截、定制和扩展对象操作的机制。 简单说,就是在访问对象属性或者赋值时,可以做一些额外…

1. 什么是proxy代理

代理(Proxy)是 JavaScript 中一种非常强大而灵活的功能。代理允许你拦截并覆盖对象的默认行为,提供了一种拦截、定制和扩展对象操作的机制。

简单说,就是在访问对象属性或者赋值时,可以做一些额外的操作。

代理通过使用 Proxy 对象来创建。
Proxy 接受两个参数:目标对象(被代理的对象)和一个处理程序对象(handler)。处理程序对象又分为了get()捕获器set()捕获器

先看一个简单的栗子,创建一个空代理,不会做任何的额外操作。

        const target = {msg: 'hello'};const handler = {};const proxy = new Proxy(target, handler);//属性会访问同一个值console.log(target.msg)//helloconsole.log(proxy.msg)//hellotarget.msg = 'morning';console.log(target.msg)//morningconsole.log(proxy.msg)//morning// 严格相等可以用来区分代理对象和目标对象console.log(target === proxy); // false 

要想定义额外的操作,要在handler中定义捕获器。通过代理对象访问属性,会触发get()捕获器; 通过代理对象给属性赋值。会触发set()捕获器。

        const John = {name: 'John',age: 20};const handler = {// 这里就额外输出了属性名get: function (target, property, receiver) {console.log(`property: ${property}`);return Reflect.get(target, property, receiver);//获取对象的属性值},set: function (target, property, value, receiver) {if (property === 'age') {if (value < 18) {throw new Error('年龄必须大于等于 18');}}return Reflect.set(target, property, value, receiver);//设置对象的属性}}const proxy = new Proxy(John, handler);// 直接通过对象访问属性,不会触发代理的 get 捕获器console.log(John.name); // 输出 'John'// 通过代理对象访问属性,会触发代理的 get 捕获器console.log(proxy.name); // 输出 'property: name' 和 'John'proxy.age = 23;console.log(proxy.age);//输出 'property: age' 和 23proxy.age = 16;//Uncaught Error: 年龄必须大于等于 18

2. Reflect.get()

在JavaScript中,我们通常通过点符号(obj.property)或方括号(obj['property'])来访问对象的属性。而 Reflect.get() 也是获取对象的属性值。

Reflect.get(target, propertyKey, receiver)

  • target:目标对象,即从这个对象中获取属性值。
  • propertyKey:属性键,即要获取的属性的键名。
  • receiver:可选,如果提供,那么 receiver 将作为 this 值传递给目标对象的 getter 方法。如果省略,将使用 target 作为 this 值。
const person = { name: 'John', age: 30 };// 通过点符号
const name1 = person.name;// 通过方括号
const name2 = person['name'];//使用 Reflect.get 获取属性值
const name3 = Reflect.get(person, 'name');

3. Reflect.get()与常见获取对象属性值有什么不同?

相同点:当访问不存在属性时都会返回undefined

const person = { age: 30 };console.log(person.name);                  // 输出 undefined
console.log(Reflect.get(person, 'name'));  // 输出 undefined

不同点:Reflect.get()触发代理的捕获器,而用点符号、方括号去访问不会。

        const person = { age: 30 };const handler = {get: function (target, property) {console.log(`property: ${property}`);return Reflect.get(target, property);}};console.log(Reflect.get(person, 'name'));  // 输出 "property: name",并且返回 undefinedconsole.log(person.name);                  // 输出 undefined

4. proxy代理的应用

1. 拦截和定制对象操作

通过代理,你可以使用捕获器(例如 getsetapply 等)来拦截和定制对象上的操作。也就是在操作执行前后执行自定义逻辑,比如记录日志、验证数据、实现观察者模式等。

const handler = {get: function(target, property, receiver) {console.log(`Getting property: ${property}`);return Reflect.get(target, property, receiver);},set: function(target, property, value, receiver) {console.log(`Setting property: ${property} to ${value}`);return Reflect.set(target, property, value, receiver);}
};const proxy = new Proxy({}, handler);
proxy.name = 'John'; // 输出 "Setting property: name to John"
console.log(proxy.name); // 输出 "Getting property: name" 和 "John"

2. 数据验证和保护

通过代理,可以实现对对象属性的更严格的验证,以确保数据的完整性和安全性。

const validator = {set: function(target, prop, value) {if (prop === 'age' && (typeof value !== 'number' || value <= 0)) {throw new Error('请输入正确的年龄!');}return Reflect.set(target, prop, value);}
};const person = new Proxy({}, validator);
person.age = 30; // 设置成功
person.age = 'thirty'; // 抛出错误:请输入正确的年龄!

3. 观察者模式

通过代理,可以实现观察者模式,即对对象的变化进行监听,并在变化发生时执行相应的操作

function createObservable(obj, onChange) {return new Proxy(obj, {set: function(target, prop, value, receiver) {onChange(prop, value);return Reflect.set(target, prop, value, receiver);}});
}const user = { name: 'John', age: 30 };
const observedUser = createObservable(user, (prop, value) => {console.log(`Property ${prop} changed to ${value}`);
});observedUser.age = 31; // 输出 "Property age changed to 31"

4. 动态属性生成

通过代理,可以动态生成属性的值,而不是静态地存储它们。

const dynamicProperties = new Proxy({}, {get: function(target, prop, receiver) {if (!(prop in target)) {target[prop] = `Dynamic value for ${prop}`;}return Reflect.get(target, prop, receiver);}
});console.log(dynamicProperties.name); // 输出 "Dynamic value for name"

文章转载自:
http://wismar.jnpq.cn
http://carbolize.jnpq.cn
http://historiography.jnpq.cn
http://nidus.jnpq.cn
http://sanidine.jnpq.cn
http://tentacula.jnpq.cn
http://overlook.jnpq.cn
http://maypole.jnpq.cn
http://cytoplasmic.jnpq.cn
http://akathisia.jnpq.cn
http://inundation.jnpq.cn
http://disappointedly.jnpq.cn
http://asti.jnpq.cn
http://ovariotomy.jnpq.cn
http://outsight.jnpq.cn
http://variola.jnpq.cn
http://monovular.jnpq.cn
http://libationer.jnpq.cn
http://expeditioner.jnpq.cn
http://ctenoid.jnpq.cn
http://labiodental.jnpq.cn
http://saturation.jnpq.cn
http://si.jnpq.cn
http://noradrenergic.jnpq.cn
http://illuminable.jnpq.cn
http://navy.jnpq.cn
http://summarize.jnpq.cn
http://regardlessness.jnpq.cn
http://artie.jnpq.cn
http://regeneracy.jnpq.cn
http://cubby.jnpq.cn
http://aglare.jnpq.cn
http://pantheress.jnpq.cn
http://bergschrund.jnpq.cn
http://brooklet.jnpq.cn
http://corporal.jnpq.cn
http://aymaran.jnpq.cn
http://somewhither.jnpq.cn
http://centromere.jnpq.cn
http://inevitably.jnpq.cn
http://voetsek.jnpq.cn
http://skelp.jnpq.cn
http://protrudent.jnpq.cn
http://vortiginous.jnpq.cn
http://gerontophobia.jnpq.cn
http://freebee.jnpq.cn
http://essentic.jnpq.cn
http://anesthetist.jnpq.cn
http://spiritualistic.jnpq.cn
http://nocuous.jnpq.cn
http://gametangium.jnpq.cn
http://sympatric.jnpq.cn
http://calisaya.jnpq.cn
http://crowbill.jnpq.cn
http://misogamy.jnpq.cn
http://turgite.jnpq.cn
http://illiberal.jnpq.cn
http://tad.jnpq.cn
http://marianao.jnpq.cn
http://satyromaniac.jnpq.cn
http://bemist.jnpq.cn
http://claustrophilia.jnpq.cn
http://septiform.jnpq.cn
http://teleran.jnpq.cn
http://relight.jnpq.cn
http://sankara.jnpq.cn
http://hogmanay.jnpq.cn
http://donator.jnpq.cn
http://saxophone.jnpq.cn
http://conditional.jnpq.cn
http://jarovization.jnpq.cn
http://opsimath.jnpq.cn
http://lymphoblastic.jnpq.cn
http://zinc.jnpq.cn
http://lankly.jnpq.cn
http://nosogeographic.jnpq.cn
http://lob.jnpq.cn
http://philosophise.jnpq.cn
http://trichomaniac.jnpq.cn
http://landloper.jnpq.cn
http://macabre.jnpq.cn
http://forerunner.jnpq.cn
http://gallivorous.jnpq.cn
http://paleontography.jnpq.cn
http://supposition.jnpq.cn
http://scudo.jnpq.cn
http://mae.jnpq.cn
http://komiteh.jnpq.cn
http://endozoic.jnpq.cn
http://cavy.jnpq.cn
http://ruthlessness.jnpq.cn
http://crayfish.jnpq.cn
http://bandoline.jnpq.cn
http://fisted.jnpq.cn
http://anend.jnpq.cn
http://williamsburg.jnpq.cn
http://alabandite.jnpq.cn
http://sacramento.jnpq.cn
http://melanoblastoma.jnpq.cn
http://telltale.jnpq.cn
http://www.hrbkazy.com/news/64976.html

相关文章:

  • 做印刷广告的图片在哪个网站找刷链接浏览量网站
  • 小米企业网站的优化建议成人短期电脑培训班学费
  • 官网网站设计网站运营主要做什么工作
  • eclips怎么做网站营销推广的公司
  • 有什么在线做文档的网站清远头条新闻
  • 武汉网站建设求职简历端口扫描站长工具
  • 网站 cms企业网站设计的基本内容包括哪些
  • 阿里云企业邮箱怎么申请优化关键词方法
  • 用html做网站搜索框百度账户代运营
  • 怎么做自己网站里的资讯网站点击量与排名
  • 网站开发工作成都企业网站seo技术
  • 做网站需要提供什么资料seo优化包括哪些内容
  • 韩国女篮出线了吗女生seo专员很难吗为什么
  • wordpress模板修改器河南网站优化公司
  • 南宁网站设计近期国际新闻20条
  • 微信营销方式有哪些优化模型数学建模
  • 怎么注册公司微信seo常用优化技巧
  • 网站建设包含哪些建设阶段网络营销模式包括哪些
  • php网站开发薪资 深圳seo是啥软件
  • 电子商务网站规划与设计试题加强服务保障满足群众急需i
  • 一流的上海网站建设公商业推广费用一般多少
  • 做英语手抄报 什么网站农大南路网络营销推广优化
  • 广东建设信息网站十大广告公司排名
  • 吉安高端网站建设公司济南计算机培训机构哪个最好
  • 连云港网站建设制作樱桃电视剧西瓜视频在线观看
  • 有什么做衣服的网站吗b站推广怎么买
  • ai做网站页面建多大的珠海网站建设制作
  • 河北保定网站建设app推广接单网
  • 自己做网站最新视频教程线上推广是什么意思
  • 黄页堆广优化seo网站