原型prototype

  • 首先说下最容易混淆的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
原型链
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容