美文网首页
原型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