1. let obj={};
  2. obj.a=10; //属性 存储这个值,获取这个值,不能执行多条语句
  3. obj.a(); //方法 不能存储值,只能执行多条语句

属性对应的是一个值,只能存储值、获取值,不能执行多条语句;
方法对应的是一个函数,不能存储值,只能执行多条语句。
而 set 和 get 能够实现对象的属性特征和对象的方法特征,可以存储值,也可以执行多条语句。

get set 的三种形式:

  1. //正在描述的对象
  2. var obj={
  3. set a(value){
  4. this._a=value;
  5. },
  6. get a(){
  7. return this._a;
  8. }
  9. }
  10. obj.a=3;
  11. console.log(obj);
  12. //给已有的对象设置值
  13. let div=document.querySelector("div");
  14. Object.defineProperty(div,"bg",{
  15. configurable:true,
  16. enumerable:true,
  17. set:function(value){
  18. this._bg=value;
  19. },
  20. get:function(){
  21. return this._bg;
  22. }
  23. })
  24. div.bg="red";
  25. console.dir(div);
  26. //面向对象ES6中的类
  27. class Box{
  28. consturctor(){
  29. }
  30. set num(value){
  31. this._num=value;
  32. }
  33. get num(){
  34. return this._num;
  35. }
  36. }
  37. Box.num=5;
  38. console.dir(Box);

实例演示

给div设置背景颜色
  1. var div = document.querySelector("div");
  2. Object.defineProperty(div, "bg", {
  3. set: function (value) {
  4. this.style.backgroundColor=value;
  5. this._bg = value;
  6. },
  7. get: function () {
  8. //设置默认值为red
  9. if (!this._bg) this._bg = "red";
  10. return this._bg
  11. }
  12. });
  13. div.bg="blue";
  14. console.log(div.bg);//blue
点击改变div的背景颜色
  1. var div = document.querySelector("div");
  2. Object.defineProperties(div,{
  3. bgList:{
  4. // 描述对象
  5. configurable:true,
  6. // 该属性的值
  7. value:["#FF0000","#00FF00","#0000FF","#FFFF00","#00FFFF","#FF00FF"]
  8. },
  9. bg:{
  10. set:function(value){
  11. if(value<0) value=this.bgList.length-1;
  12. if(value>this.bgList.length-1) value=0;
  13. this.style.backgroundColor=this.bgList[value];
  14. this._bg=value;
  15. },
  16. get:function(){
  17. if(!this._bg) this._bg=0;
  18. return this._bg;
  19. }
  20. }
  21. });
  22. div.bg=0;
  23. div.addEventListener("click",clickHandler);
  24. function clickHandler(e){
  25. div.bg++;
  26. }
  • 如果只写 set 方法,不写get方法,这个属性是一个只写属性,不可读;
  • 如果只写 get 方法,不写set方法,这个属性是一个只读属性,不可写入;
  • 在严格模式下,只写set ,会打印 undefined;只写get,会报错;

更多相关文章

  1. 华为ie认证难不难
  2. 【东哥说书】俞军产品方法论
  3. Python 下载文件的多种方法
  4. 一个细节 | Java中asList的缺陷
  5. Python_学习之面向对象
  6. Flink异步之矛-锋利的Async I/O
  7. 如果你在准备面试,好好看看这130道题
  8. Java NIO?看这一篇就够了!
  9. 如何获取Kafka的消费者详情——从Scala到Java的切换

随机推荐

  1. 惊叹,Pyecharts绘制饼图原来可以如此漂亮!
  2. 结婚这件小事
  3. Matplotlib 动态图还可以这样玩,收藏了!
  4. (美团)巧用数组下标,轻轻松松找出所有元素
  5. 字节一面,面试官告诉我链表掌握的不熟练
  6. 晚上看了轮子哥的知乎想法,我失眠了
  7. 计算机专业的学生怎样练习编程才能把编程
  8. LeetCode 题解:一顿操作猛如虎,一看击败百
  9. 2021 年,程序员技术公众号生死劫
  10. 起个简单枯燥的标题:找出连续差相同的数字