javascript中的原型和继承

javascript一直是初学者口中的难点,甚至一些有些许工作经验的人也不太明白其中的原理,而我就是那个初学者,前段时间在阮一峰老师的博客上看了一篇文章《javascript继承机制的设计思想》有点顿悟的感觉,那咱们就开始讨论一下吧。

先从普通函数和构造函数来学习

(1)普通函数的形式:

function obj () {
   return 123 ;
}
obj();//123

普通函数和构造函数的区别是它不用new去调用,可以用return去返回值,函数的内部不建议使用this。

(2)构造函数的形式:

  function Obj (name,age) {
        this.name = name;
        this.age = age;
    }
    Obj.prototype.fn = function () {
        alert(this.name+"is a girl");
    }
    var obj = new Obj("Alice",25);
    obj.fn();//Alice is a girl

构造函数需要用new来调用,函数内部可以用this,一般不用return,默认返回this对象,而且首字母经常用大写。通常我们说new一个对象,应该说的就是给构造函数new一个实例,然后构造函数的this就指向了新的实例对象。  

javascript中的继承机制设计思想

由构造函数我们可以知道,假如我们new两个实例对象,两个对象的属性是独立的,改变一个实例对象的属性对另外一个没有任何影响。所以我们就用到了prototype属性,这个属性的作用是如果两个实例对象有共享属性的话,就可以把共享属性放到prototype对象中,用阮一峰老师的话来说就是“prototype对象就好像是实例对象的原型,而实例对象则好像继承了prototype对象一样”。

 

原文地址:https://www.cnblogs.com/daikefeng/p/6251933.html