原型链

2019-06-25  本文已影响0人  Grayly吖

一、原型(是个对象)

    // 自定义构造函数(构造器)
    function MadeCat(name, age, addr) {
        this.name = name;
        this.age = age;
        this.addr = addr;
    }
    // 访问方式1: 通过构造函数的prototype访问
    var p = MadeCat.prototype;
    console.log('MadeCat的原型是', p);
    var p1 = cat.__proto__;
    var p2 = cat2.__proto__;
    console.log(p1 === p2);  //true

二、在原型上定义的属性和方法

    // 自定义构造函数(构造器)
    function MadeCat(name, age, addr) {
        this.name = name;
        this.age = age;
        this.addr = addr;
    }

    //1、在原型上定义属性和方法
    MadeCat.prototype.color = '白色';
    MadeCat.prototype.call = function () {
        console.log('咩,咩,咩');
    }

    //2、创建出来的实例也会拥有原型上的属性和方法
    var cat = new MadeCat('咖菲猫', 2, '美国');
    console.log(cat); //实例
    console.log(cat.color);
    cat.call();
实例也拥有原型上的属性和方法

三、数组、日期、正则都属于对象(万物皆为对象)

        var arr = new Array();
        var date = new Date();
        console.log(arr.__proto__.__proto__ === Object.prototype);  //true
        console.log(date.__proto__.__proto__ === Object.prototype); // true

四、原型链

原型链图解2

小试牛刀

        var F = function () { };
        Object.prototype.a = function () {
            console.log("aa");
        };
        Function.prototype.b = function () {
            console.log("bb");
        };
        var f = new F();
        F.a();
        F.b();
        f.a();

答案:aa bb aa 报错

        function A() {
            this.name = 'a'
            this.color = ['green', 'yellow']
        }
        function B() {
        }
        B.prototype = new A()
        var b1 = new B()
        var b2 = new B()

        b1.name = 'change'
        b1.color.push('black')
        console.log(b2.name)   
        console.log(b2.color)  

答案: a , ['green', 'yellow','black']

上一篇 下一篇

猜你喜欢

热点阅读