javascript属性之get/set

var o  = {
get x(){
     return 7;
},
set x(val){
    console.info("不能设置x的值");
}
}

o.x    //7    读取x值的时候,会使用get方法

o.x = 9  //不能设置x的值      赋值x时,会使用set方法

get/set与原型链


//不包含get/set的原型

function p(){}

p.prototype.z = 9;

var p1 = new p();

p1.z  //9    //对象上没有属性,将在原型链上查找

p1.z = 10;    //原型上不包含get/set方法时,向原型上的同名属性赋值,会在对象上添加此属性

p1.z //10     //对象上能够找到属性,将不会在原型链上查找
//原型上包含get/set方法

function person(){}

Object.defineProperty(person.prototype,‘z‘,{get:function(){return 1}});

var p = new person();

p.z  //1

p.z = 89;

p.z  //still 1     原型链上get/set方法,操作此属性的时候,会向上查找原型链。 所以p.z仍旧是1 
//那个问题来了,在原型链上有get/set方法的时候,怎么实现在对象上添加此属性呢?  

function foo(){}

Object.defineProperty(foo.prototype,‘z‘,{get:function(){return 1}})

var f = new foo();

f.z  //1

f.z = 2;

f.z   //still 1

Object.defineProperty(f,‘z‘,{value:100,configurable:true,writable:true});

f.hasOwnProperty(‘z‘)  //true

f.z  //100

f.z = 90;

f.z  //90

delete f.z  //true

f.hasOwnProperty(‘z‘)   //false

f.z   //1  回到原型链查找
时间: 2024-10-07 05:31:47

javascript属性之get/set的相关文章

Javascript属性:addEvent()用法浅析

做 web 应用的人,经常会用到 Javascript 来处理页面上的一些事情.表单验证我们不谈,在根据用户使用情况,显示/隐藏,或者执行一段 js function,的时候,我们需要和页面的 DOM 树打交道.看看 Gmail ,发送邮件,按下"发送"钮后,用 Ajax 在后端发送邮件内容,根据返回的状态,在编辑页面的上方直接显示一小段文字"您的邮件已经发送.". 通常的思想,我们会在那个发送按钮里面写上: onclick="javascript:sen

Javascript属性constructor/prototype的底层原理

在Javascript语言中,constructor属性是专门为function而设计的,它存在于每一个function的prototype属性中.这个constructor保存了指向function的一个引用.在定义一个函数(代码如下所示)时, function F() { // some code } JavaScript内部会执行如下几个动作: 为该函数添加一个原形属性(即prototype对象). 为prototype对象额外添加一个constructor属性,并且该属性保存指向函数F的

Javascript属性枚举(for/in)

ECMAScript规范并没有指定for/in循环按照何种顺序来枚举对象属性.但实际上,主流浏览器厂商的JavaScript实现是按照属性定义的先后顺序来枚举简单对象的属性,先定义的属性先枚举.如果使用对象直接量的形式创建对象,则将按照直接量中属性的出现顺序枚举.有一些网站和Javascript库是依赖于这种枚举顺序的,浏览器厂商不大可能会修改这个顺序. Javascript解释器枚举"简单"对象一种交互的属性枚举顺序.在下列情况下,枚举的顺序取决于具体的实现(并且是非交互的): 对象

JavaScript 属性类型(数据属性 访问器属性)

ECMA-2把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.” 严格来说,这就相当于说对象是一组没有特定顺序的值.对象的属性或方法都有一个名字,而每个名字映射到一个值.我们可以把ECMAScript的对象想象成散列表,无非就是一组名值对,其中值可以是数据或函数.(高程三 P139) [译]JavaScript中对象的属性   <高程三 P139 属性类型> JavaScript笔记--数据属性和访问器属性 JavaScript中有两种不同类型的属性:命名数据属性(named

JavaScript ---属性

获取属性 可以通过点(.)或方挂号([])运算符来获取属性的值. 对于点(.)来说,右侧必须是一个以属性名称命名的简单标识符.对于[]来说,方挂号内必须是一个计算结果为字符串的表达式. var author = book.author;//得到book的'author'属性 var title = book['main title'];//得到book的'main title' 在ECMAScript 3中,点运算符后的标识符不能是保留字,比如,o.for或o.class是非法的:必须使用方挂号

JavaScript 属性操作

1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>无标题文档</title> 6 7 <script> 8 /* 9 HTML 的属性操作:读.写 10 属性名: 11 属性值: 12 13 读操作:获取.

09.05 javascript 属性 内置属性 自定义属性 DOM文档对象模型

# 属性 ### 内置属性 * js对象和html标签有映射关系 ### 自定义属性 * getAttribute() * setAttribute() * hasAttribute() * removeAttribute() ### H5新增的自定义属性操作操作 * HTML:  `<tag data-attr="">` * JS :  element.dataset.attr ### 把属性当做属性节点 * getAttributeNode(attrname) # 元素

javascript属性操作

属性的读写 //属性添加 var obj = {x:1,y:2}; obj.z = 3; obj["m"] = 4; //属性的读取 var obj = {x: 1, y: 2, z: 3, m: 4}; for(p in obj){ console.info(p); }

javascript属性一览

getElementsByTagName() 方法可返回带有指定标签名的对象的集合. getElementsByName() 方法可返回带有指定名称的对象的集合. getAttribute() 方法返回指定属性名的属性值.    提示:如果您希望以 Attr 对象返回属性,请使用 getAttributeNode. innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML. innerText  属性设置或返回表格行的开始和结束标签之间的值,但不包括HTML.