对象、构造函数和prototype

对象

每一个对象的建立都基于引用类型,好比:javascript

<script>
  var str = new String("beckham");
</script>

咱们能够建立自定义对象,最简单的方法就是建立一个Object的实例,好比:java

<script>
  var person = new Person();
  person.name = "Nicholas";
  person.age = 29;
  person.callName = function(){
     alert(this.name);
  }
</script>

上面的例子建立了名为person的对象,并添加了3个属性。函数

建立对象和构造函数

1.建立对象有多种方法,上述的一种,属于Object构造函数。
2.此外,还能够用字面量对象建立一个函数,以下:this

<script>
  var person = {
    name : "Nicholas",
    age : 29,
    callName : function(){
     alert(this.name);
    }
  };
  alert(person.name);  //"Nicholas"
</script>

3.蓝后,是第三种,用工厂模式 建立,以下:spa

<script>
  function person(name,age,callName){
    var o = new Object();
    o.name=name;
    o.age=31;
    o.callName=function()
    {
        alert(this.name);
    };
    return o;
  }
  var person1 = person("Nicholas",29);
</script>

person()函数会根据接收的参数建立一个包含全部信息的对象。可是这种方法因为没有解决对象识别的问题(直到对象的类型),并很差~
接下来的一种方法就是下面重点介绍的:自定义构造函数。prototype

自定义构造函数

与上述的构造函数不一样,用Object、Array之类的构造函数被称为原生构造函数。自定义构造函数能够自定义对象的属性和方法。构造函数就是初始化一个实例对象。

让咱们来看一个栗子~指针

<script>
  function Person(name,age,job){
    this.name=name;
    this.age=age;
    this.job=job;
    this.sayName=function()
    {
        alert(this.name);
    };
  }
  var person1 = new Person("Nicholas",29,"engineer");
  alert(person1.name);  //"Nicholas"
</script>

注意~构造函数有一个特色,默认函数首字母大写。在上面的栗子中,person1就是Person对象的一个实例。person1有一个constructor的属性,指向Personcode

prototype和原型对象

咱们建立的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含了由特定类型全部实例共享的属性和方法。咱们能够说Person.prototype是person1的原型对象。因此,Person.prototype更像是一个模型和中转站。让咱们看下面的栗子:对象

<script>
  function Person(){};
  person.prototype.name = "Nicholas";
  person.prototype.age = 29;
  person.prototype.job = "engineer";
  person.prototype.callName = function(){
    alert(this.name);
  };
  var person1 = new Person();
  person1.callName();  //"Nicholas"
</script>

如上,咱们将callName()方法和全部的属性添加到了Person的prototype属性中。Person.prototype是一个第三者,Person和person1其实是没有连接的,他们二者的联系是经过Person.prototype来创建的,而它里面会保存包括name、age、job等属性和callName()方法。或许经过下面这个图更好理解。blog

这里写图片描述

更简单的原型语法

咱们可能会以为每次都要写一遍Person.prototype会比较麻烦,因此咱们能够用字面量的方式:

<script>
  function Person(){};
  Person.prototype = {
          name : "Nicholas",
          age : 29,
          job : "engineer",
        sayName : function(){
              alert(this.name);
        }
  };
  var person1 = new Person();
</script>

上面的代码最终的执行结果也是同样的,只是一点不一样:constructor再也不指向Person了。

相关文章
相关标签/搜索