美文网首页
面向对象的程序设计

面向对象的程序设计

作者: 言叶丶 | 来源:发表于2017-02-22 17:42 被阅读0次

    new 一个对象的过程会发生什么

    1. 创建一个新对象‘
    2. 将构造函数的作用域赋值给新作用域,(将this执行该对象)
    3. 执行构造函数内的代码(给这个新的对象添加属性)
    4. 返回新对象

    实现继承的几种方式

    原型继承
    function Foo () {
        this.name = 'foo';
    }
    Foo.prototype.show = function () {
        console.log(this.name);
    }
    
    function Bar () {}
    Bar.prototype = new Foo();
    
    var bar = new Bar();
    console.log(bar instanceof Foo); // true
    
    function Foo () {
        this.name = 'foo';
        this.age = 17;
    }
    Foo.prototype.show = function () {
        console.log(this.name);
    }
    
    var Bar = Object.create(Foo);
    console.log(Bar.name, Bar.age); //foo, 17
    //Bar没有构造函数,因此不能执行new操作,而且不具有show属性
    
    var Peo = {
        name: 'peo',
        say: function() {}
    }
    
    var Son = Object.create(Peo);
    
    借用构造函数实现继承
    function Super () {
        this.name = 'name';
    }
    Super.prototype.show = function () {
        console.log(this.name);
    }
    
    function Sub () {
        Super.call(this);
    }
    var sub = new Sub();
    // 相当于在new一个Sub对象的时候,执行一下Super函数,这种方式只会继承构造函数内部定义的name属性
    
    组合继承

    利用原型继承实现对原型属性和方法的继承, 借用构造函数来实现对实例属性的继承

    function Super (name) {
        this.name =  name;
    }
    Super.prototype.show = function () {
        console.log(this.name);
    }
    
    function Bar (name) {
        Super.call(this, name);
    }
    Bar.prototype = new Super();
    var bar = new Bar('bar');
    console.log(bar.name); // bar
    bar.show(); // bar
    
    

    递归

    arguments.callee();

    闭包是指有权访问另一个函数作用域的变量的函数

    相关文章

      网友评论

          本文标题:面向对象的程序设计

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