问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

PHP扩展 怎么访问常量属性

发布网友 发布时间:2022-04-06 02:47

我来回答

1个回答

热心网友 时间:2022-04-06 04:16

访问器属性不包含数据值;它们包含一对getter和setter函数(不过,这两个函数都不是必须的)。在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。访问器属性有如下4个特性。
[[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。对于直接在对象上定义的属性,这个特性的默认值为true。
[[Enumerable]]:表示能否通过for-in循环返回属性。对于直接在对象上定义的属性,这个特性的默认值为true。
[[Get]]:在读取属性时调用的函数。默认值为undefined。
[[Set]]:在写入属性时调用的函数。默认值为undefined。
 访问器属性不能直接定义,必须使用Object.defineProperty()来定义。例如:
var
book
=
{
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function(){
return
this._year;
},
set:function(newValue){
if(newValue>2004)
{
this._year
=
newValue;
this.edition
+=
newValue-2004;
}
}
});
book.year
=
2005;
alert(book.edition);//2
  以上代码创建了一个book对象,并给它定义两个默认的属性:_year和edition。_year前面的下划线是一种常用的记号,用于表示只能通过对象方法访问的属性。而访问器属性year则包含一个getter函数和一个setter函数。getter函数返回_year的值,setter函数通过计算来确定正确的版本。因此,把year属性修改为2005会导致_year变成2005,而edition变为2。这是使用访问器属性的常见方式,即设置一个属性的值会导致其他属性发生变化。
  不一定非要同时制定getter和setter。只指定getter意味着属性不能写,尝试写入属性会被忽略。在严格模式下,尝试写入只指定了getter函数的属性会抛出错误。类似的,只指定setter函数的属性也不能读,否则在非严格模式下会返回undefined,而在严格模式下会抛出错误。
  支持ECMAScript
5的这个方法的浏览器有IE9+(IE8只是部分实现)、FF4+、Safari5+、Opera12+和Chrome。在这个方法之前,要创建访问器属性,一般都使用两个标准的方法:_defineGetter_()和_defineSetter_()。这两个方法最初是由Firefox引入的,后来Safari3、Chrome1和Opera9.5也给出了相同的实现。使用这两个遗留的方法,可以像下面这样重写前面的例子。
var
book
={
_year=2004,
edition:1
};
//定义访问器的旧方法
book._defineGetter_("year",function(){
return
this._year;
});
book._defineSetter_("year",function(){
if(newValue>2004){
this._year
=
newValue;
this.edition
+=
newValue
-
2004;
}
});
book.year=2005;
alert(book.edition);//2
在不支持Object.defineProperty()方法的浏览器中不能修改[[Configurable]]和[[Enumerable]]。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 PHP修改属性 php中使用正则表达式或其他方法去除html标签的样式属性(不能写死的) PHP XML增加删除节点属性 如何使用php正则去掉table的所有属性? PHP中 unset删除对象中的私有属性后 用isset判断这个属性是否存在,但是一直返回true php如何删除标签内的属性 php 题目 在 windows 平台下部署 php 开发环境,通常需要安装什么组件,每个组件 怎么在自己电脑机器上快速搭建PHP开发测试环境 php开发环境可以在win7系统上搭建吗? Windows7下如何搭建PHP运行环境 如何在win环境下搭建php开发环境 win10怎么安装php开发环境 如何在windows上配置php环境 php里字符串转换数组 php 如何把这个字符串转换为数组? php字符串怎么转换成数组 PHP中如何把字符串按一定字节数变成数组 PHP 字符串转化成数组 PHP 如何把 字符串 转为数组 php如何将一个字符串转换成为数组 帮忙啊。。。快点 高分 求解php怎么修改js文件中对象的属性,并保存文件 PHP中使用DOM方法如何根据XML子节点值或子节点属性删除所在的父节点? php中如何修改数据库元素的多个属性? PHP中对象属性的作用是什么? 在php中,将一个对象赋给了一个属性,那调这个属性的对象是那个, php面向对象中对属性和方法定义的问题 php 分页查询怎么redis缓存 如何使用phpredis缓存静态页面 thinkphp 怎么做redis缓存技术 PHP DUXCMS如何开启页面缓存 php用redis缓存和用数组缓存的区别 redis是缓存系统还是数据库 PHP web缓存 php文件缓存,redis 哪个更快 有大神知道emlog支持PHP的redis扩展缓存吗? 怎么用php代码实现登录 PHP怎么实现登录和注册? 如何用php 做游客登录功能 PHP用二维数组实现登陆功能