zoukankan      html  css  js  c++  java
  • 原型继承的坑

    //原型式继承
    function inheritObject(o) {
      //声明一个过渡函数对象
      function F() {
        //过渡对象的原型继承父对象
          F.prototype = o;
      }
      //返回过渡对象的一个实例,该实例的原型继承了夫对象
      return new F();
    }
    
    //测试
    
    let book = {
      name: 'js books',
      alikeBook: ['css book', 'html book']
    };
    
    let newBook = inheritObject(book);
    newBook.name = 'ajax book';
    // newBook.alikeBook.push('xml book');
    
    console.log(newBook.name);           //ajax book
    console.log(newBook.alikeBook);      //undefined
    
    console.log(book.name);              //js books
    console.log(book.alikeBook);         //['css book', 'html book']

    1.创建一个object
    instance = new Object();
    2.设置原型链
    instance.__proto__ = F.prototype;
    3.将上下文this指向instance,执行函数体
    F.apply(instance, arguments);
    4.返回值

    所以,可以看到,设置原型链的操作是在第二步的时候的执行的,而这个时候,你代码里面的F.prototype = o还没有执行,所以instance.__proto__只会被赋值undefined,自然就没有达到继承的效果

    函数未执行 ,没有进行F.prototype = o 的操作;

     
  • 相关阅读:
    解决IE6浏览器下position:fixed固定定位问题
    CSS中overflow:hidden在ie6、ie7无效不能隐藏解决办法
    liunx 中删除export设置的环境变量
    文件操作
    集合操作
    三级菜单
    字典操作
    字符串操作
    购物车程序
    列表操作
  • 原文地址:https://www.cnblogs.com/fordouble/p/7058256.html
Copyright © 2011-2022 走看看