【js原型和原型链】

js原型和原型链

参考文章链接: link

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

指向实例对象

js 复制代码
    // 定义构造函数
    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属性需要自己手动添加

js 复制代码
    // 定义构造函数
    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)

三、原型链

js 复制代码
    // 定义构造函数
    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.prototype
    console.log(Star.prototype.__proto__===Object.prototype)

四、关系图

五、普通函数和函数对象

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

所以回过头来我们会发现实例对象只是一个普通对象,obj是没有prototype属性的,而构造函数是一个函数对象,只有函数对象才有prototype这个原型属性

而prototype可以帮助我们定义或者重写一些新的公共方法

Object, Function, Array, String, Number, Boolean, Date 等都是 JS 内置的函数对象。

相关推荐
U.2 SSD4 分钟前
ECharts漏斗图示例
前端·javascript·echarts
江城开朗的豌豆4 分钟前
我的小程序登录优化记:从短信验证到“一键获取”手机号
前端·javascript·微信小程序
excel7 分钟前
Vue Mixin 全解析:概念、使用与源码
前端·javascript·vue.js
Never_Satisfied34 分钟前
在JavaScript / HTML中,Chrome报错此服务器无法证实它就是xxxxx - 它的安全证书没有指定主题备用名称
javascript·chrome·html
艾小码38 分钟前
零基础学JavaScript:手把手带你搭建环境,写出第一个程序!
javascript
北海-cherish6 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
AALoveTouch7 小时前
网球馆自动预约系统的反调试
javascript·网络
新中地GIS开发老师9 小时前
Cesium 军事标绘入门:用 Cesium-Plot-JS 快速实现标绘功能
前端·javascript·arcgis·cesium·gis开发·地理信息科学
Superxpang9 小时前
前端性能优化
前端·javascript·vue.js·性能优化
左手吻左脸。9 小时前
解决el-select因为弹出层层级问题,不展示下拉选
javascript·vue.js·elementui