欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 【js原型和原型链】

【js原型和原型链】

2024/10/24 20:12:17 来源:https://blog.csdn.net/m0_75134766/article/details/141564309  浏览:    关键词:【js原型和原型链】

js原型和原型链

  • 一、构造函数和原型对象中的this
  • 二、原型对象的constructor属性
  • 三、原型链
  • 四、关系图
  • 五、普通函数和函数对象

参考文章链接: link

一、构造函数和原型对象中的this

指向实例对象
在这里插入图片描述

    // 定义构造函数function Star(name,age){this.name = name;this.age = age;console.log(this,'我是构造函数的this')}// 公共的属性或方法Star.prototype.sing=function(){console.log('我是会唱歌的明星')console.log(this,'我是原型对象中的this')}// 创建实例对象const obj=new Star('周深',18)obj.sing()

二、原型对象的constructor属性

默认原型对象的的constructor属性是指向构造函数(找自己的爸爸)的,但是当原型对象需要定义多个公共的方法时,原型对象会重新以赋值的方式进行定义,此时的constructor属性需要自己手动添加

    // 定义构造函数function Star(name,age){this.name = name;this.age = age;}// 公共的属性或方法// 定义多个方法Star.prototype={constructor: Star,sing:function(){console.log('我会唱歌')},dance:function(){console.log('我还会跳舞')}}// 创建实例对象const obj=new Star('单依纯',18)console.log(Star.prototype.constructor)

在这里插入图片描述

三、原型链

    // 定义构造函数function Star(name,age){this.name = name;this.age = age;}// 公共的属性或方法// 定义多个方法Star.prototype={constructor: Star,sing:function(){console.log('我会唱歌')},dance:function(){console.log('我还会跳舞')}}// 通过构造函数创建实例对象const obj=new Star('单依纯',18)// 原型对象和实例对象找爸爸 构造函数console.log(Star.prototype.constructor===obj.constructor)// 构造函数找自己的大儿子 原型对象console.log(Star.prototype)// 实例对象找原型对象 二儿子去找大儿子玩console.log(obj.__proto__)// 判断是不是都在找大儿子console.log(Star.prototype===obj.__proto__)//  原型链 大儿子去找妈妈console.log(Star.prototype.__proto__)// 判断一下是不是顶点object.prototypeconsole.log(Star.prototype.__proto__===Object.prototype)

在这里插入图片描述

四、关系图

在这里插入图片描述

五、普通函数和函数对象

所有Function的实例都是函数对象,其他的都是普通对象,Function实例的实例就是普通对象

所以回过头来我们会发现实例对象只是一个普通对象,obj是没有prototype属性的,而构造函数是一个函数对象,只有函数对象才有prototype这个原型属性
而prototype可以帮助我们定义或者重写一些新的公共方法
Object, Function, Array, String, Number, Boolean, Date 等都是 JS 内置的函数对象。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com