javascript题的解析

来源:互联网 发布:哪里多淘宝模板下载 编辑:程序博客网 时间:2024/06/06 03:43
<script type="text/javascript">


  function Person() {   //创建一个函数
    getAge = function () {    //getAtge在函数中定义是没有写var关键字,所以是全局作用域的
      console.log(10)
    }
    return this
  }


  Person.getAge = function () {      //给Person添加一个方法
    console.log(20)
  }


  Person.prototype.getAge = function () {   //在Person的原型值添加一个属性getAge
    console.log(30)
  }


  var getAge = function () {     //用var声明创建的的函数,叫函数表达式且不会提前声明,但变量会提前声明
    console.log(40)
  }


  function getAge() {    //使用函数声明创建的函数,会在所有代码执行前被创建,也可在之前调用
    console.log(50)
  }




  Person.getAge() // 20   调用Person.getAge()输出20



  getAge() // 40  //全局中有两个getAge,函数创建的提前声明,然后被函数表达式覆盖,所以输出的是40


  Person().getAge() // 10   //调用 Person()函数,执行里面的代码,全局的getAge被覆盖,它的返回值是this指向window,然后去全局中找getAge


  getAge() // 10   调用getAge()函数,现在的值是10,因为Person()函数调用时里面代码被执行覆盖之前的值


  new Person.getAge() // 20   new一个 Person.getAge() ,然后将新创建的对象作为一个返回值返回


  new Person().getAge() // 30    优先级问题,成员访问 .  :从左到右执行,new一个类,然后去它原型中找

</script>
</body>
</html>