• JavaScript 面向对象编程 · 理解对象


    前言:

         在我们深入 面向对象编程之前 ,让我们先理解一下Javascript的 对象(Object),我们可以把ECMAScript对象想象成散列表,其值无非就是一组名值对,其中值可以是数据或者函数;
     
    主要内容
     
    1.1  理解并创建对象
    •        创建自定义对象最简单方式—— 使用对象字面量
    1. var car = {
      "wheels":4,
      "engines":1,
      "seats":5
      };
    •   除了上一种方法外,我们还可以使用构造函数来创建对象。

    构造函数 通常使用大写字母开头,以便把自己和其他普通函数区别开。

    下面便是一个 构造函数 了:

    1. var Car = function() {
      this.wheels = 4;
      this.engines = 1;
      this.seats = 1;
      };

      在 构造函数 中, this 指向被此 构造函数 创建出来的 对象 。

    2. var myCar = new Car();
        myCar现在成为Car的一个实例。使用 new 关键字 去调用构造函数。因为只有这样,Javascript才知道这是要去构造一个新 对象 ,并且把构造函数中的 this 指向这个新对象
    •  使用Object.create()创建一个具有指定原型且可选择性地包含指定属性的对象。
      var obj = Object.create({ foo: 1 }, { // foo is an inherit property.
        bar: {
          value: 2  // bar is a non-enumerable property.
        },
        baz: {
          value: 3,
          enumerable: true  // baz is an own enumerable property.
        }
      });

     1.2 属性类型

       1.数据属性:数据属性包含一个数据值的位置,在这个位置可以读取和写入值.言下之意即,数据属性是可以直接通过对象.属性的形式访问和赋值的。

    •  [[Configurable]]
    •  [[Enumerable]]
    •  [[Writable]]
    •  [[Value]]
     var person = {
            name : "Nicholas"
        }
    //里面的name属性是数据属性

    Object.defineProperty()方法接收三个参数,属性所在的对象,属性的名字和一个描述符对象。设置其中一个或多个值,可以修改对应的特性值。

    通过 Object.defineProperty() 方法,可以创建数据属性(并设定其[[Enumerable]]等内部属性),也可以创建访问器属性(访问器属性仅包含 getter  setter函数,当然这两个也不是必须的)。

            2.访问器属性:允许用户在赋值或取值都经过预先设定的函数,从而实现内部属性的那一种特殊效果。

    •  [[Configurable]]
    •  [[Enumerable]]
    •  [[Get]]
    •  [[Set]]
     举个例子
    var book = {
        _year : 2004,//_year前面下划线是常用的记号,表示只能通过对象方法访问的属性
        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 是访问器属性。直接调用 book.year,即调用了这个访问器属性中定义的 get 方法,返回 book._year 这个数据属性。如果给 book.year 赋值,就是调用了这个访问器属性中定义的 set 方法。

    默认值

    如果你不明确的指定某个特性的值,则它们会被赋一个默认值:

    特性名称 默认值
    [[Value]] undefined
    [[Get]] undefined
    [[Set]] undefined
    [[Writable]] false
    [[Enumerable]] false
    [[Configurable]] false

    这些默认值对于属性描述符尤其重要.

     
     
  • 相关阅读:
    java经典面试题
    用OpenSSL把二进制的Cer证书转换程Base64格式的PEM格式的证书
    JVM中java实例对象在内存中的布局
    高级加密标准(英语:Advanced Encryption Standard,缩写:AES)
    中断和中断处理程序
    CS 寄存器 和 IP 寄存器
    Gson通过借助TypeToken获取泛型参数的类型的方法
    Tomcat 的 JDBC 连接池
    Google Guava官方教程(中文版)
    阿里DRUID数据源
  • 原文地址:https://www.cnblogs.com/kasmine/p/6411461.html
Copyright © 2020-2023  润新知