原型、原型链、继承一丢丢的分析

一、原型

1.什么是原型:

  在构造函数创建出来的时候,系统会默认的帮构造函数创建并关联一个对象,这个对象就是原型,构造函数的每一个实例都可以访问原型中的成员(一般我们放的是方法);

原型的作用: 

1)、通过原型来添加方法,解决数据共享,节省内存空间 

2)、作用于继承,模拟面向对象,来做到继承,多态

eg:

2.原型链

首先,正如上面所说的,当函数被new操作符调用时,会创建出一个对象,并且该对象中会有一个指向其原型对象的链接(一个非标准属性:_proto_),这样新建的对象(实例)就可以调用相关原型对象中的成员;但是,原型对象自身也具有对象固有的普遍特征(它也是个对象),因此,也包含了指向其原型对象的链接,因此,就形成了一个链式结构,称之为原型链。


原型、原型链、继承一丢丢的分析_第1张图片

二、继承

1.简单来说就是一个对象没有的成员(女朋友),但是另一个对象有,给它拿过用用(嘿嘿嘿!!);

2.继承的过程: 王校长老婆他妈跟他要10个亿,王校长没有咋办?找他爹王健林,王健林也没有,咋整?把万达卖了,就有了;要是卖了也不够,那就返回null.;

3.继承的三种方式:

1).构造继承 

核心:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类。

最终结果:


原型、原型链、继承一丢丢的分析_第2张图片

2).原型式继承:

function object(o) {

            function F() { }

            F.prototype = o;

            return new F();

        }

使用场合:没必要构建构造函数,仅仅是想模拟一个对象的时候

3).寄生继承:

function createAnother(original) {

            var clone = object(original); //通过调用函数创建一个新对象

            clone.sayHi = function () { //以某种方式来增强这个对象

                alert("hi");

            };

            return clone; //返回这个对象

        }

        var person = {

            name: "Nicholas",

            friends: ["Shelby", "Court", "Van"]

        };

        var anotherPerson = createAnother(person);

        anotherPerson.sayHi(); //"hi"

缺点:方法在函数中定义,无法得到复用

你可能感兴趣的:(原型、原型链、继承一丢丢的分析)