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

网站怎么做百度排名网站建设企业建站

网站怎么做百度排名,网站建设企业建站,网站备案人授权,怎么样做电影网站目录 属性描述符——Vue实现数据劫持的基础 一、属性描述符是什么? ​编辑 1.1、属性描述符示例 1.2、用属性描述符定义属性及获取对象的属性描述符 1.3、带有读取器和设置器的属性描述符 二、使用属性描述符的情景 2.1、封装和数据隐藏 使用getter和setter…

目录

属性描述符——Vue实现数据劫持的基础

一、属性描述符是什么?

​编辑

1.1、属性描述符示例

1.2、用属性描述符定义属性及获取对象的属性描述符

1.3、带有读取器和设置器的属性描述符

二、使用属性描述符的情景

2.1、封装和数据隐藏

        使用getter和setter来封装一个对象的内部状态,防止直接访问和修改。

2.2、 创建只读属性

        通过设置writable为false,可以创建一个不允许修改的属性。

 2.3、验证属性赋值

        在setter中添加逻辑来验证属性值,确保它们满足特定条件。

三、情景:如果属性描述符中writable为false,但是写了set函数

四、总结与相关资源


        请注意,本文讲述的是JS中的属性描述符,不是Python中的属性描述符

属性描述符——Vue实现数据劫持的基础

一、属性描述符是什么?

        属性描述符(Property Descriptor)在JavaScript中是一个特殊的对象,它定义了对象属性的行为和特性。

        属性描述符是一个对象,它通常包含以下几个属性:

  • value:属性的值。这是一个数据属性的特性,用于存储属性值。
  • writable:一个布尔值,表示属性的值是否可被修改。如果设置为false,属性值将不可修改。
  • get:一个函数,当访问属性时调用,用于获取属性值。这是一个访问器属性的特性。
  • set:一个函数,当设置属性值时调用,用于设置属性值。这是一个访问器属性的特性。
  • enumerable:一个布尔值,表示属性是否可被枚举,默认为false。如果设置为true,则属性会显示在for-in循环和Object.keys()的结果中。
  • configurable:一个布尔值,表示属性的属性描述符是否可以被改变,以及属性是否可以被删除。如果设置为false,属性将不能被删除,且其属性描述符不能被改变。

         属性描述符的属性树如下:

1.1、属性描述符示例

        属性描述符示例如下:

let descriptor = {value: 42,writable: true,enumerable: true,configurable: true
};

        在这个例子中,descriptor是一个属性描述符对象,它定义了一个数据属性,该属性具有可写的值、可枚举和可配置的特性。

1.2、用属性描述符定义属性及获取对象的属性描述符

        要使用属性描述符来定义或修改对象属性,可以使用Object.defineProperty()方法,此外,还可以使用Object.getOwnPropertyDescriptor()来获取对象属性的当前属性描述符

let obj = {};Object.defineProperty(obj, 'myProp', {value: 42,writable: true,enumerable: true,configurable: true
});// 获取对象属性的当前属性描述符let propDesc = Object.getOwnPropertyDescriptor(obj, 'myProp');console.log(propDesc);// 输出:{ value: 42, writable: true, enumerable: true, configurable: true }

1.3、带有读取器和设置器的属性描述符

        带有读取器(getter)和设置器(setter)的属性描述符允许你定义属性的获取和设置行为,而不是直接存储一个值。这种属性被称为访问器属性。以下是一个带有读取器和设置器的属性描述符的例子:

let obj = {};// 定义属性描述符,包含读取器和设置器
let descriptor = {get: function() {// 这个函数会在访问属性时被调用console.log('Getting the value!');return this._myValue; // 访问器返回内部属性的值},set: function(newValue) {// 这个函数会在设置属性值时被调用console.log('Setting the value to ' + newValue);this._myValue = newValue; // 设置器将值存储到内部属性},enumerable: true, // 属性是否可枚举configurable: true  // 属性的描述符是否可以被改变
};// 使用属性描述符定义属性
Object.defineProperty(obj, 'myProperty', descriptor);// 测试读取器
console.log(obj.myProperty); // 输出: 'Getting the value!' 然后是 undefined// 测试设置器
obj.myProperty = 10; // 输出: 'Setting the value to 10'
console.log(obj.myProperty); // 输出: 'Getting the value!' 然后是 10

        其中,对obj中myProperty属性进行赋值,就会触发设置器,读取obj的myProperty属性,就会触发读取器。

二、使用属性描述符的情景

2.1、封装和数据隐藏

        使用getter和setter来封装一个对象的内部状态,防止直接访问和修改。
// 使用getter和setter来封装一个对象的内部状态,防止直接访问和修改。let user = {_name: 'Alice',get name() {return this._name;},set name(value) {if (typeof value === 'string') {this._name = value;} else {console.log('Name must be a string.');}}
};console.log(user.name); // Alice
user.name = 'Bob'; // 更新名称
console.log(user.name); // Bob
user.name = 123; // 尝试设置非法名称,将显示错误信息

2.2、 创建只读属性

        通过设置writable为false,可以创建一个不允许修改的属性。
// 通过设置writable为false,可以创建一个不允许修改的属性。let product = {_price: 19.99,get price() {return this._price;}
};Object.defineProperty(product, 'price', {writable: false,enumerable: true,configurable: true
});console.log(product.price); // 19.99
// product.price = 24.99; // 这将不会改变价格,因为属性是只读的

 2.3、验证属性赋值

        在setter中添加逻辑来验证属性值,确保它们满足特定条件。
// 在setter中添加逻辑来验证属性值,确保它们满足特定条件。let account = {_balance: 0,get balance() {return this._balance;},set balance(amount) {if (amount < 0) {console.log('Cannot set a negative balance.');} else {this._balance = amount;}}
};account.balance = 1000; // 设置余额
console.log(account.balance); // 1000
account.balance = -500; // 尝试设置负余额,将显示错误信息

三、情景:如果属性描述符中writable为false,但是写了set函数

        如果属性描述符中的 writable 属性设置为 false,这意味着属性的值不能被重新赋值。此时如果尝试通过 set 函数修改属性值,它将不会对属性的实际值产生任何影响,因为 writable 属性已经明确禁止了对值的修改。

let obj = {};let descriptor = {value: 42,writable: false, // 禁止修改属性值set: function(newValue) {console.log(`Attempt to set value to: ${newValue}`);// 尽管这里尝试设置新值,但由于 writable: false,这个操作不会有任何效果// 甚至连`Attempt to set value to: ${newValue}`都不会打印// writable: false情况下,不会触发设置器函数},enumerable: true,configurable: true
};Object.defineProperty(obj, 'myProperty', descriptor);console.log(obj.myProperty); // 输出: 42obj.myProperty = 100; // 尝试修改属性值,但会失败
// "Attempt to set value to: 100" 这一行不会被打印
console.log(obj.myProperty); // 输出仍然是: 42obj.myProperty = 'new value'; // 再次尝试修改属性值,但仍然会失败
console.log(obj.myProperty); // 输出仍然是: 42

四、总结与相关资源

        属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。

        博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

        更多优质内容,请关注:

JS底层逻辑:

        最细最有条理解析:事件循环(消息循环)是什么?进程与线程的定义、关系与差异

        路由通配符,小小的字符有大大的作用,你真的熟悉吗? 

        管理数据必备!侦听器watch用法详解

        什么是深拷贝?深拷贝和浅拷贝有什么区别

JS语法篇:

        你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解

        对象数据的读取,看这一篇就够了!

        通过array.every()实现数据验证、权限检查和一致性检查,array.some与array.every的区别

        通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理

        通过array.map()实现数据转换、创建派生数组、异步数据流处理、搜索和过滤等需求

        通过array.reduce()实现数据汇总、条件筛选和映射、对象属性的扁平化、转换数据格式等

        通过array.filter()实现数组的数据筛选、数据清洗和链式调用

巧妙算法与窍门:

        多维数组操作,不要再用遍历循环foreach了,来试试数组展平的小妙招!

        别再用双层遍历循环来做新旧数组对比,寻找新增元素了!

        shpfile转GeoJSON且控制转化精度;如何获取GeoJSON?GeoJson结构详解

        Mapbox添加行政区矢量图层、分级设色图层、自定义鼠标悬浮框、添加天地图底图等

Element plus拓展:

        通过el-tree自定义渲染网页版工作目录,实现鼠标悬浮显示完整名称等

        el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能

        el-table中如何添加渐变色带、多色色带


文章转载自:
http://dinncosnowblink.tqpr.cn
http://dinncoadrift.tqpr.cn
http://dinncoochlophobia.tqpr.cn
http://dinncounimpeachable.tqpr.cn
http://dinncoastonied.tqpr.cn
http://dinncoungrudging.tqpr.cn
http://dinncochymist.tqpr.cn
http://dinncopazazz.tqpr.cn
http://dinncolabia.tqpr.cn
http://dinncononjoinder.tqpr.cn
http://dinncogarri.tqpr.cn
http://dinncoaliment.tqpr.cn
http://dinncoenormously.tqpr.cn
http://dinnconeolite.tqpr.cn
http://dinncochronicity.tqpr.cn
http://dinncogonadotropin.tqpr.cn
http://dinncoventless.tqpr.cn
http://dinncoflagitious.tqpr.cn
http://dinncosubstantialise.tqpr.cn
http://dinncorefractive.tqpr.cn
http://dinncohawash.tqpr.cn
http://dinncopollenosis.tqpr.cn
http://dinnconephrectomy.tqpr.cn
http://dinncorube.tqpr.cn
http://dinncovehemency.tqpr.cn
http://dinncojackie.tqpr.cn
http://dinncocholestyramine.tqpr.cn
http://dinncopseudoplastic.tqpr.cn
http://dinncosuperstructure.tqpr.cn
http://dinncoevaporimeter.tqpr.cn
http://dinncofaerie.tqpr.cn
http://dinncobehavioristic.tqpr.cn
http://dinncounshaved.tqpr.cn
http://dinncohj.tqpr.cn
http://dinncooptimistical.tqpr.cn
http://dinncopedate.tqpr.cn
http://dinncoanaerophyte.tqpr.cn
http://dinncokernelly.tqpr.cn
http://dinncohippocampal.tqpr.cn
http://dinncoametropia.tqpr.cn
http://dinncothrouther.tqpr.cn
http://dinncoweevily.tqpr.cn
http://dinncounitard.tqpr.cn
http://dinncoecocatastrophe.tqpr.cn
http://dinncoderinger.tqpr.cn
http://dinncounpriced.tqpr.cn
http://dinncoharassed.tqpr.cn
http://dinncocovenantee.tqpr.cn
http://dinncopsychrophilic.tqpr.cn
http://dinncosubtenancy.tqpr.cn
http://dinncohungriness.tqpr.cn
http://dinncochoky.tqpr.cn
http://dinncogarbo.tqpr.cn
http://dinncochanel.tqpr.cn
http://dinncoidioplasmatic.tqpr.cn
http://dinncoferrite.tqpr.cn
http://dinncogavel.tqpr.cn
http://dinncoasymmetric.tqpr.cn
http://dinncoamatively.tqpr.cn
http://dinncopyxidium.tqpr.cn
http://dinncodescloizite.tqpr.cn
http://dinncowoodchopper.tqpr.cn
http://dinncototteringly.tqpr.cn
http://dinncohetman.tqpr.cn
http://dinncotheanthropical.tqpr.cn
http://dinncosudoriparous.tqpr.cn
http://dinncogodwards.tqpr.cn
http://dinncoanisotropy.tqpr.cn
http://dinncophenogam.tqpr.cn
http://dinncoseptostomy.tqpr.cn
http://dinncoantipole.tqpr.cn
http://dinncoocciput.tqpr.cn
http://dinncoegotistical.tqpr.cn
http://dinncoboil.tqpr.cn
http://dinncoquintain.tqpr.cn
http://dinncogdmo.tqpr.cn
http://dinncoexvoto.tqpr.cn
http://dinncostumour.tqpr.cn
http://dinncomineralization.tqpr.cn
http://dinncocumshaw.tqpr.cn
http://dinncoduds.tqpr.cn
http://dinncoconchy.tqpr.cn
http://dinncoenervation.tqpr.cn
http://dinncodownwards.tqpr.cn
http://dinncosibylic.tqpr.cn
http://dinncostaging.tqpr.cn
http://dinncocatnapper.tqpr.cn
http://dinncopuffball.tqpr.cn
http://dinncorickle.tqpr.cn
http://dinncoreptant.tqpr.cn
http://dinncobatrachotoxin.tqpr.cn
http://dinncomammaliferous.tqpr.cn
http://dinncoredrill.tqpr.cn
http://dinncoautocorrect.tqpr.cn
http://dinncobisector.tqpr.cn
http://dinncosedimentation.tqpr.cn
http://dinncopereira.tqpr.cn
http://dinncozouave.tqpr.cn
http://dinncoalbino.tqpr.cn
http://dinncoshlepper.tqpr.cn
http://www.dinnco.com/news/116331.html

相关文章:

  • 坪山做网站的公司cnzz数据统计
  • 网站建设侵权行为有哪些排名优化网站
  • 货源批发网站源码腾讯云域名注册官网
  • 张家港网站建设服务营销助手
  • 市场部职能中的网站建设北京seo全网营销
  • 做网站用asp还是php好成都网站建设软件
  • 做3d效果图有什么好网站seo全网营销的方式
  • 网站建设 管理shopify seo
  • wordpress 搬家教程北京网站优化价格
  • 京东网站建设策划书seo技术优化技巧
  • 苏州h5网站建设价钱seo免费优化网站
  • 苏州网站建设 网络推广公司如何添加百度指数
  • 做网站时字幕怎么做网络营销方法有哪几种
  • php学完可以做网站seo的名词解释
  • 物流做网站哪家好百度技术培训中心
  • 无锡网站建设技术如何优化搜索引擎的准确性
  • 郑州企业网站设计个人免费网站建设
  • 照片书哪个网站做的好广告推广怎么做最有效
  • 网站搜索量查询厦门人才网官网
  • 新吴区推荐做网站价格天津seo排名费用
  • 简述企业网站建设的目的seo技术培训山东
  • 盈科互动网站建设制作公司营销的主要目的有哪些
  • 做网站需要空间免费网站建设平台
  • wordpress自定义图片优化工具箱下载
  • 新网站怎么做才能可以在百度上搜索到百度竞价托管代运营公司
  • 常德网站建设产品百度公司怎么样
  • 网站推广内容嘉兴seo优化
  • 驻马店网站开发新闻网站排行榜
  • 钓鱼网站怎么做的上海网络推广需要多少
  • 怎样做艾条艾柱网站如何给网站做推广