美文网首页
原型prototype

原型prototype

作者: Sccong | 来源:发表于2017-02-25 23:01 被阅读0次
    • 首先说下最容易混淆的prototype和__proto__
    • prototype是函数才会有的属性,用prototype属性(好处:修改「父类」的 prototype 可以动态修改所有已经创造的实例)
    • __proto__是每个对象都有的属性,__proto__来自你构造函数的prototype
    
    //在JavaScript的世界中,所有的函数都能作为构造函数,构造出一个对象
       //下面我给自己构造一个女神做对象
       function NvShen () {
         this.name = "Alice";
       }
       //现在我设置NvShen这个函数的prototype属性
       //一般来说直接用匿名的对象就行,我这里是为了方便理解,
       //先定义一个hand对象再把hand赋值给NvShen的prototype
       var hand = {
         whichOne: "right hand",
         someFunction: function(){
           console.log("not safe for work.");
         }
       };
       NvShen.prototype = hand; 
    
       //这个时候,我们可以用NvShen作为构造函数,构造出myObject对象
       var myObject = new NvShen();
       console.log(myObject.__proto__ === NvShen.prototype) //true
    //以上代码部分转自知乎
    //作者:刘狗蛋
    //链接:https://www.zhihu.com/question/34183746/answer/124279182
    

    普通对象不能通过prototype在原型上设置属性,因为prototype是函数对象才用的属性

    顺便替下getPrototypeOf()的作用,用来查询构造函数的prototype.

    var a=function(){}
    ->undefined
    a.prototype.age=24
    ->24
    var b=new a()
    ->undefined
    Object.getPrototypeOf(b)
    ->Object {age: 24}
    

    2017.2.26新增
    isPrototypeOf()的作用,用于检查调用的对象的原型链里是否存在传入的对象

    var a=function(){}
    ->undefined
    var b=new a();
    ->undefined
    a.prototype.isPrototypeOf(b)
    ->true
    

    instanceof()的作用,用于检查调用的对象是否是某个构造函数(类型,后面的参数)的实例

    var a=function(){}
    ->undefined
    var b=new a();
    ->undefined
    b instanceof a
    ->true
    
    原型链

    相关文章

      网友评论

          本文标题:原型prototype

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