美文网首页
面向对象

面向对象

作者: 辉夜乀 | 来源:发表于2017-05-12 19:45 被阅读26次

    var object = new Object() 时,发生了什么?

    1. 创建一个空对象作为 this
    1. this.__proto__指向构造函数的prototype
    2. 运行构造函数
    3. 返回 this

    以上步骤通过关键字 new 全部搞定

    如何手动指定对象的原型链

    有 3 种方法

    1. object.__proto__ = {...}
      优点:简单直接;
      缺点:这是ES6的方法,IE8以下不支持;

    2. 借用 new

    var myProto = {
        name: 'foo'
    }
    var obj = {}
    var Temp = function(){}
    Temp.prototype = myProto
    obj = new Temp()
    
    1. 使用 Object.create(proto)
      以proto对象为原型,创建一个新的对象

    JS实现类的继承

    var Animal = function(){
        this.种类 = "动物"
    }
    
    Animal.prototype.say = function(){
        console.log(this.种类 + "叫");
    }
    
    var Cat = function(){
        Animal.apply(this, arguments)
        this.tail = "猫尾巴"
    }
    
    //下面三行代码只为了实现 Cat.prototype.__proto__ = Animal.prototype
    //为了兼容IE67
    var F = function(){};
    F.prototype = Animal.prototype;
    Cat.prototype = new F();
    
    //纠正一下 constructor
    Cat.prototype.constructor = Cat; 
    
    //给 Cat 赋自己的属性
    Cat.prototype.run = function(){
        console.log("猫儿在跑");
    }
    
    Cat.prototype.say = function(){
        console.log("喵喵喵");
    }
    
    var cat = new Cat()
    
    console.dir(cat)
    
    
    Paste_Image.png

    不用类也能实现继承

    var animal = {
        "种类": "动物",
        say: function(){
            console.log("动物叫");
        }
    }
    
    var cat = Object.create(animal)  // 创建以 animal 为原型的空对象
    
    cat.tail = "猫尾巴"
    cat.say = function(){
        console.log("喵喵喵");
    }
    console.dir(cat)
    
    Paste_Image.png

    相关文章

      网友评论

          本文标题:面向对象

          本文链接:https://www.haomeiwen.com/subject/qzqtxxtx.html