1. 程式人生 > 實用技巧 >由(a === 1 && a === 2 && a === 3) === true 引發的一系列思考

由(a === 1 && a === 2 && a === 3) === true 引發的一系列思考

<script>

    var x = 0

    Object.defineProperty(this, 'a', {
      get() {
        x++
        console.log('get');
        return x
      }
    })
    console.log(a === 1 && a === 2 && a === 3);
    var obj = {

    }

    Object.defineProperty(obj, 'name', {
      get() {
        console.log('get');
      }
    })

    name     //無列印
    obj.name  //列印 'get'

    //結論:Object.defineProperty(obj, 'name')會建立name屬性加入到obj,並且監聽obj.name;並不能監聽name
    var obj = {
      name: 1
    }

    console.log(obj.name);  //1

    Object.defineProperty(obj, 'name', {
      get() {
        console.log('get');  //'get'
      }
    })

    console.log(obj.name); //undefined
//列印依次為1,'get',undefined    最後一行程式碼'console.log(obj.name)'讀取obj.name被get劫持並且get無返回值,因此undefined
    var obj = {
      name: 1
    }
    console.log(obj.name);  //1

    Object.defineProperty(obj, 'name', {
      get() {
        console.log('get'); //'get'
        return 10
      }
    })

    console.log(obj.name); //10     最後一行程式碼'console.log(obj.name)'讀取obj.name被get劫持並且get返回值為10替代了obj.name


  </script>