新手javascript.info学习笔记——Object03

  • 作为对象属性的函数被称为 方法。(类比python)
    ​
    // 这些对象作用一样
    
    let user = {
      sayHi: function() {
        alert("Hello");
      }
    };
    
    // 简写
    let user = {
      sayHi() { // 与 "sayHi: function(){...}" 一样
        alert("Hello");
      }
    };
    
    ​

    以上两种是声明方法的常见方法。

  • 为了访问对象,方法中可以使用this作为关键字(来指代这个对象),this的值就是在点之前的这个对象,即调用该方法的对象。

    et user = {
      name: "John",
      age: 30,
    
      sayHi() {
        // "this" 指的是“当前的对象”
        alert(this.name);
      }
    
    };
    
    user.sayHi(); // John

    实际上也可以直接用对象的名称来指代,但是如果复制该对象,并让原本的对象名无法指向该对象,就可能会出错。

    let user = {
      name: "John",
      age: 30,
    
      sayHi() {
        alert( user.name ); // 导致错误
      }
    
    };
    
    
    let admin = user;
    user = null; 
    
    admin.sayHi(); // TypeError: Cannot read property 'name' of null

    新手对this有大致了解,知道它可以指代之前出现的对象即可。

  • 链式调用

    let ladder = {
      step: 0,
      up() {
        this.step++;
      },
      down() {
        this.step--;
      },
      showStep: function() { // 显示当前的 step
        alert( this.step );
      }
    };

    有一个可以上下移动的 ladder 对象:如果我们要按顺序执行几次调用,可以这样做

    ladder.up();
    ladder.up();
    ladder.down();
    ladder.showStep(); // 1
    ladder.down();
    ladder.showStep(); // 0

    修改 updown 和 showStep 的代码,让调用可以链接,就像这样:

    ladder.up().up().down().showStep().down().showStep(); // 先展示 1,然后是 0

    答案:在每次调用后返回这个对象本身。

    let ladder = {
      step: 0,
      up() {
        this.step++;
        return this;
      },
      down() {
        this.step--;
        return this;
      },
      showStep() {
        alert( this.step );
        return this;
      }
    };
    
    ladder.up().up().down().showStep().down().showStep(); // 展示 1,然后 0

    这种方法称为链式调用,在 JavaScript 库中被广泛使用。

  • 构造函数(constructor function)存在的意义是利用同一个对象模板创造多个实例,例如user

    // User是一个函数
    function User(name) {
      this.name = name;
      this.isAdmin = false;
    }
    
    let user = new User("Jack");
    // user是新创建的一个对象
    
    alert(user.name); // Jack
    alert(user.isAdmin); // false

    这样,仅用一行代码就完成了对象user的创建。比每次都使用字面量创建要短得多,而且更易于阅读。

  • 构造函数的规则:1.它们的命名以大写字母开头。2.只能由 "new" 操作符来执行。(当一个函数被使用 new 操作符执行时,它按照以下步骤:一个新的空对象被创建并分配给 this;函数体执行,通常它会修改 this,为其添加新的属性;返回 this 的值。)像这样:

    function User(name) {
      // this = {};(隐式创建)
    
      // 添加属性到 this
      this.name = name;
      this.isAdmin = false;
    
      // return this;(隐式返回)
    }
  • 构造器(构造函数)的return语句,如果是一个object,则返回这个object;否则返回this。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值