继承

作者: 爱上帘外修竹 | 来源:发表于2016-08-03 21:04 被阅读0次
    1. 继承有什么作用?

    对代码功能进行扩展,提高代码复用性

    2. 有几种常见创建对象的方式? 举例说明?
    //直接创建
    var obj = {
      name: "jirengu",
      age: 28
    }
    //使用构造函数
    function Jrg(name,age){
      this.name = name;
      this.age = age;
    }
    var p2 = new Jrg("jirengu",28);
    //函数工厂创建
    function creatObj(name,age){
      var obj = {
        name = name;
        age = age;
        sayName = function(){
          console.log(this.name)
        }
      }
      return obj;
    }
    var obj = creatObj("jirengu",28);
    var obj2 = creatObj("fangfang",24);
    //原型方式
    function obj(name,age){
      obj.prototype.name = name;
      obj.prototype.age = age;
      obj.prototype.sayName = function(){
        console.log(name);
      };
    }
    var Obj1 = new obj("jirengu",28)
    
    3. 下面两种写法有什么区别?
    //方法1
    function People(name,sex){
     this.name = name;
     this.sex = sex;
     this.printName = function(){
     console.log(this.name);
     }
    }
    var p1 = new People('饥人谷', 2)
    //方法2
    function Person(name, sex){
     this.name = name;
     this.sex = sex;
    }
    Person.prototype.printName =
     function(){
       console.log(this.name);
    }
    var p1 = new Person('若愚', 27);
    

    方法1使用构造函数创建了对象p1,该对象拥有p1.name、p1.sex和p1.printName三个属性
    方法2将方法printName绑定在对象Person的原型上,这样,通过Person新定义的对象就都拥有了printName方法,提高了代码复用性。

    4. Object.create有什么作用?兼容性如何?如何使用?

    对对象进行clone.ES5的方法,不兼容IE6、IE7
    使用方法:

    function Person(name,sex){
      this.name = name;
      this.sex = sex;
    }
    Person.prototype.sayName = function(){
      console.log(this.name);
    }
    function Male(name,sex,age){
      Person.call(this,name,sex);
      this.age = age;
    }
    var _proto = Object.create(Person.prototype);
    Male.prototype = _proto;
    _proto.constactor = Male;
     var p =new Male("nz","男","28");
    p.sayName();
    
    5. hasOwnProperty有什么作用? 如何使用?

    hasOwnPerperty是Object.prototype的一个方法,可以判断一个对象是否包含自定义属性而不是原型链上的属性,hasOwnProperty是JavaScript中唯一一个处理属性但是不查找原型链的函数
    以问题4中的代码为例:

    m.hasOwnProperty('name'); // true
    m.hasOwnProperty('printName'); // false
    Male.prototype.hasOwnProperty('printAge'); // true
    
    6. 实现Object.create的 polyfill,如:(ps: 写个 函数create,实现 Object.create 的功能)什么是 polyfill?

    一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了

    function create(obj){
      if(typeof Object.create !== "function"){
        var func = function(){
          func.prototype = obj.prototype;
          return new func();
        }
      }
        return Object.create(obj.prototype);
    }
    var obj = {
      a: 1,
      b:2
    };
    var obj2 = create(obj);
    console.log(obj2.a); //1
    
    6. 如下代码中call的作用是什么?)
    function Person(name, sex){
     this.name = name;
     this.sex = sex;
    }
    function Male(name, sex, age){
     Person.call(this, name, sex); //这里的 call 有什么作用 this.age = age;
    }
    //在this的作用域下执行Person
    
    7. 补全代码,实现继承
    function Person(name, sex){
      this.name = name;
      this.sex = sex;
    }
    Person.prototype.getName = function(){
      return this.name;
    };
    Person.prototype.printName = function(){
      console.log(this.age);
    }
    function Male(name, sex, age){
      Person.call(this,name,sex);
      this.age = age;
    }
    var _proto = Object.create(Person.prototype);
    Male.prototype = _proto;
    Male.prototype.constractor = Male;
    Male.prototype.getAge = function(){
      return this.age;
    };
    var ruoyu = new Male('若愚', '男', 27);
    ruoyu.printName();
    

    本文版权归帘外修竹及杭州饥人谷所有,转载必须说明出处

    相关文章

      网友评论

          本文标题:继承

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