2018-01-08 关于javascript原型链的思考

原型链

理解 prototype

  • http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html
    • 理解prototype
    function Cat(name,color){
            //本地属性
        this.name = name;
        this.color = color;
    
    }
    
    //继承属性
    
    Cat.prototype.type = "猫科动物";
    
    Cat.prototype.eat = function(){
       alert("吃老鼠")
    };
    
    
    然后生成实例
    var cat1 = new Cat("大毛","黄色");
    var cat2 = new Cat("二毛","黑色");
    alert(cat1.type); // 猫科动物
    cat1.eat(); // 吃老鼠
    
    这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。
    alert(cat1.eat == cat2.eat); //true
    

prototype 的验证几种方法

1> isPrototypeOf()

  • 这个方法用来判断,某个proptotype对象和某个实例之间的关系。
  alert(Cat.prototype.isPrototypeOf(cat1)); //true

  alert(Cat.prototype.isPrototypeOf(cat2)); //true

2> hasOwnProperty()

每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。

  alert(cat1.hasOwnProperty("name")); // true

  alert(cat1.hasOwnProperty("type")); // false

3> in运算符

in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。

  alert("name" in cat1); // true

  alert("type" in cat1); // true

in运算符还可以用来遍历某个对象的所有属性。

  for(var prop in cat1) {
      alert("cat1["+prop+"]="+cat1[prop]);
  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是...
    云端漫记阅读 248评论 0 0
  • (一):封装 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。...
    曾基锟阅读 231评论 0 0
  • Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象。但是,它又不是...
    一句诺言阅读 210评论 0 0
  • 时间很快,生活很慢 半夜醒来,看着如水的夜色,爱人在身边安详地沉睡,蓦然感到一种熟悉的恐慌。这样的安详,还会留给我...
    望月止渴阅读 204评论 0 2
  • 爱上你 爱上你的一切 即便是遭遇到了 一些不可避免的伤情 我会在坚强里适应你的节奏 给你一个关怀,情深意切 在我的...
    枫泪_22e5阅读 245评论 0 0