• 技术文章 >web前端 >js教程

    深入学习JavaScript对象访问器(Getter和Setter)

    青灯夜游青灯夜游2019-11-29 14:39:24转载767

    JavaScript访问器(Getter和Setter),ECMAScript 5(2009)介绍了Getter和Setters。 Getters和setter允许您定义对象访问器(Computed Properties)。

    【相关课程推荐:JavaScript视频教程

    JavaScript Getter(get关键字)

    <!DOCTYPE html>
    <html>
    <meta charset="utf-8">
    <title>js</title>
    <body>
    
    <h2>JavaScript Getters和Setters</h2>
    
    <p> Getters和setter允许您通过方法获取和设置属性。</p>
    
    <p>此示例使用lang属性获取语言属性的值。</p>
    
    <p id="demo"></p>
    
    <script>
        // 新建一个对象。
        var person = {
            firstName: "John",
            lastName : "Doe",
            language : "en",
            get lang() {
                return this.language;
            }
        };
        // 使用getter显示来自对象的数据:
        document.getElementById("demo").innerHTML = person.lang;
    </script>
    
    </body>
    </html>

    JavaScript Setter (set关键字)

    <!DOCTYPE html>
    <html>
    <meta charset="utf-8">
    <title>JavaScript Getters和Setters</title>
    <body>
    
    <h2> JavaScript Getters和Setters </h2>
    
    <p> Getters和setter允许您通过方法获取和设置属性。</p>
    
    <p>此示例使用lang属性设置语言属性的值。</p>
    
    <p id="demo"></p>
    
    <script>
        // Create an object:
        var person = {
            firstName: "John",
            lastName : "Doe",
            language : "NO",
            set lang(value) {
                this.language = value;
            }
        };
        // Set a property using set:
        person.lang = "en";
        // Display data from the object:
        document.getElementById("demo").innerHTML = person.language;
    </script>
    
    </body>
    </html>

    使用JavaScript函数还是Getter?

    这两个例子之间有什么区别?

    示例1:

    var person = {
      firstName: "John",
      lastName : "Doe",
      fullName : function() {
        return this.firstName + " " + this.lastName;
      }
    };
    // 使用方法显示对象的数据:
    document.getElementById("demo").innerHTML = person.fullName();

    示例2:

    var person = {
      firstName: "John",
      lastName : "Doe",
      get fullName() {
        return this.firstName + " " + this.lastName;
      }
    };
    // 使用getter显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.fullName;

    示例1将fullName作为函数访问:person.fullName()。示例2将fullName作为属性访问:person.fullName。第二个示例提供了更简单的语法。

    数据质量

    使用getter和setter时,JavaScript可以确保更好的数据质量。lang在此示例中,使用属性language以大写形式返回属性的值:

    // 创建一个对象:
    var person = {
      firstName: "John",
      lastName : "Doe",
      language : "en",
      get lang() {
        return this.language.toUpperCase();
      }
    };
    // 使用getter显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.lang;

    lang在此示例中,使用该属性将大写值存储在language属性中:

    var person = {
      firstName: "John",
      lastName : "Doe",
      language : "",
      set lang(lang) {
        this.language = lang.toUpperCase();
      }
    };
    // 使用setter设置对象属性:
    person.lang = "en";
    // 显示来自对象的数据:
    document.getElementById("demo").innerHTML = person.language;

    为什么使用Getter和Setter?

     ● 它提供了更简单的语法

     ● 它允许属性和方法的语法相同

     ● 它可以确保更好的数据质量

     ● 在幕后做事情很有用

    <!DOCTYPE html>
    <html>
    <meta charset="utf-8">
    <title>js</title>
    <body>
    
    <h2> JavaScript Getters和Setters </h2>
    
    <p>完美的创建反对象:</p>
    
    <p id="demo"></p>
    
    <script>
        var obj = {
            counter : 0,
            get reset() {
                this.counter = 0;
            },
            get increment() {
                this.counter++;
            },
            get decrement() {
                this.counter--;
            },
            set add(value) {
                this.counter += value;
            },
            set subtract(value) {
                this.counter -= value;
            }
        };
        // Play with the counter:
        obj.reset;
        obj.add = 5;
        obj.subtract = 1;
        obj.increment;
        obj.decrement;
        // Display the counter:
        document.getElementById("demo").innerHTML = obj.counter;
    </script>
    
    </body>
    </html>

    Object.defineProperty()

    Object.defineProperty()方法还可用于添加Getters和Setter:

    // 定义对象
    var obj = {counter : 0};
    // 定义 setters
    Object.defineProperty(obj, "reset", {
      get : function () {this.counter = 0;}
    });
    Object.defineProperty(obj, "increment", {
      get : function () {this.counter++;}
    });
    Object.defineProperty(obj, "decrement", {
      get : function () {this.counter--;}
    });
    Object.defineProperty(obj, "add", {
      set : function (value) {this.counter += value;}
    });
    Object.defineProperty(obj, "subtract", {
      set : function (value) {this.counter -= value;}
    });
    // Play with the counter:
    obj.reset;
    obj.add = 5;
    obj.subtract = 1;
    obj.increment;
    obj.decrement;

    浏览器支持

    Internet Explorer 8或更早版本不支持Getters和Setter:

    Internet ExplorerChromeFireFoxSafariOpera

    9.0+
    支持
    支持
    支持
    支持

    本文来自 js教程 栏目,欢迎学习!

    以上就是深入学习JavaScript对象访问器(Getter和Setter)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:51cto,如有侵犯,请联系admin@php.cn删除
    上一篇:three.js使用gpu选取物体并计算交点位置 下一篇:为什么用vue.js,为什么前端开发46%的人都在用?
    大前端线上培训班

    相关文章推荐

    • 深入了解JavaScript中的原型和继承• 深入理解JavaScript的并发模型和事件循环机制• JavaScript中二叉树,动态规划和回溯法(案例分析)• 面试常问之JavaScript变量提升

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网