zoukankan      html  css  js  c++  java
  • Javascript 构造函数

    1. 常规的构造函数 范例

      

     1 //声明一个"人"的构造函数,目的是通过new出来的对象都是一个个的具体的"人"
     2 var Person=function(){
     3 
     4 //私有属性,该属性new出来的对象时无法获取到的.
     5 var prx="other";
     6 
     7 //定义了eye的属性
     8 //在这里eye是实例属性,也就是说,通过new出来的对象都具备eye的属性
     9 this.name="double";
    10 
    11 //我们用var 申明了一个私有方法,该方法 不能被 new Person 调用到,
    12 //一般的,我们只需要再内部使用到的方法可最好声明称私有方法.
    13 var prxMethond=function(){
    14     console.log("in prxMethod");
    15 }
    16 //定义了say的方法
    17 //同eye,say是一个实例方法,new出来的对象都有say的方法
    18 this.say=function(){
    19   console.log("hi i am "+this.name);
    20  }
    21 }
    22 //为Person定义了一个原型方法eat,该方法为公共方法,
    23 //每一个通过new Person 实例出来的对象都共享同一个eat方法,
    24 //当然如果不想共享可在新对象中进行重写覆盖
    25 Person.prototype.eat=function(){
    26 console.log(this.name+"eat something...");
    27 }
    28 //定义静态方法,该方法目的在于不用new Person 就能调用该方法,
    29 //我们把不用实例化就能调用的方法叫做静态方法
    30 Person.staticMethod=function(){
    31 console.log("this is static method");
    32 }

    2.js new关键字的所做的事情

      var zhangsan = new Person();

      实际上在内部是这样的。

      var zhangsan={};

      zhangsan.__proto__=Person.prototype;

      Person.call(zhangsan);

      总结就是:  

      1. 声明了一个zhangsan的空对象
      2. 将Person的prototype赋值给zhangsan的proto属性
        关于对象的prototype和proto概念如下:
        prototype是函数的一个属性(每个函数都有一个prototype属性),这个属性是一个指针,指向一个对象。它是显示修改对象的原型的属性。 proto是一个对象拥有的内置属性(每个对象都有一个proto属性),是JS内部使用寻找原型链的属性。
        这就是为什么zhangsan可以调用到Person原型(Person.prototype)方法的原因
      3. 调用Person函数,并且把zhangsan当成是this传入函数中,这就是为什么zhangsan可以调用Person函数定义的this.属性或this.方法的原因
  • 相关阅读:
    poj 1088 滑雪
    位运算与bitset
    hdu 4607 Park Visit
    树的直径
    codeforces 495D Sonya and Matrix
    German Collegiate Programming Contest 2015(第三场)
    BAPC 2014 Preliminary(第一场)
    Benelux Algorithm Programming Contest 2014 Final(第二场)
    E. Reachability from the Capital(tarjan+dfs)
    poj2104 K-th Number(划分树)
  • 原文地址:https://www.cnblogs.com/syomm/p/6011306.html
Copyright © 2011-2022 走看看