ES6:Object.defineProperty方法
程序员文章站
2024-03-14 08:52:04
...
ES6:Object.defineProperty方法
如何定义对象的属性
==>方法1:
//数据描述符
Object.defineProperty(要定义属性的对象,要定义的属性名,{
value:属性值,
writable:默认false,该属性的value是否能被赋值运算符改变
})
==>方法2:
//存取描述符
Object.defineProperty(要定义属性的对象,要定义的属性名,{
get:function(){},
set:function(){}
})
==>Object.defineProperty的应用:数据的双向数据绑定
==>需求:在input里面输入内容,会显示在span里面
==>vue利用这个实现了数据的双向数据绑定,可以不用操作dom,直接通过数据模型就可以改变元素的内容
方法一
//方法1
var obj = {b:1}
//定义obj上的a属性
Object.defineProperty(obj,'a',{
value:1,
writable:true //允许重写obj上属性a的值
})
//获取obj上的属性a的值
console.log(obj.a)
//重写obj上属性a的值
obj.a = 34;
console.log(obj.a)
//遍历obj
for(var key in obj){
console.log(key);//没有特别说明,无法遍历出来a属性
}
方法二
Object.defineProperty(obj,'text',{
get:function(){
//当读取obj的text的属性值的时候,会触发这个函数
console.log('get方法被调用了');
//return 的值,就是属性值
return text;
},
set:function(val){
//set可以接收一个参数,就是你想赋的值
//当设置obj的text的属性值的时候,会触发这个函数
console.log('set方法被调用了');
//可以通过下面方法赋值,text变量就是obj的text的属性值
text = val;
}
})
obj.text = 4546;
console.log(obj.text)
Object.defineProperty的应用
数据的双向数据绑定,vue框架
需求:在input里面输入内容,会显示在span里面
想法:发input的值变成一个对象的属性,只要input里面输入内容,就会触发set,在set里面更新span的内容
var model = {};
Object.defineProperty(model,'txt',{
get:function(){},
set:function(val){
var span = document.getElementsByTagName('span')[0];
span.innerHTML = val;
}
})
var input = document.getElementsByTagName('input')[0];
input.oninput = function(){
model.txt = input.value;//必然触发set函数
}
上一篇: Day09 JavaObject01
下一篇: Day12 JavaObject02
推荐阅读
-
hibernate中重复显示问题的解决方法 HibernateOpenSourceSQL
-
ES6:Object.defineProperty方法
-
关于Object.defineProperty()
-
java中判断字符串是否为数字的三种方法 博客分类: java java
-
思考方法论 博客分类: 思考 思考
-
使用FileUtils.toFile方法根据URL创建File对象 博客分类: java
-
Kettle数据抽取(转换)出现乱码问题解决方法 博客分类: BI kettlebi
-
关于struts运用pager-taglib报错的解决方法 pager-taglib
-
Pentaho Mondrian 教程(二)集成另一种方法 博客分类: pentahomondrian pentahomondrian
-
oracle expdp导出和impdp导入使用方法