首页 > 其他分享 >【JS】函数的prototype属性

【JS】函数的prototype属性

时间:2022-10-27 20:47:31浏览次数:39  
标签:name u1 JS constructor new prototype 属性

 函数中的prototype属性                 1. 函数中prototype属性的值是一个对象或null,默认只有一个constructor属性指向函数本身。                 2. 当使用new Func()创建一个对象时,使用诸如 new F() 这样的构造函数来创建一个新对象。如果 F.prototype 是一个对象,那么 new 操作符会使用它为新对象设置 [[Prototype]]。                 3. prototype和[[Prototype]]不同:                     - [[Prototype]] 是一个对象的隐藏属性,本质是一个指针,保存的是内存地址,指向对象的原型。                     - prototype是一个函数中的属性,本质是一个对象或null。                 4. 实例对象通过原型链可以找到Func.prototype上的constructor属性                         即new Func().constructor = Func = Func.prototype  

 function User(name){
            this.name = name
        }

        User.prototype = {}

        const u1 = new User('zhangsan')
        const u2 = new u1.constructor('lisi')
        console.log(u2.name)

  

    1. 找u1.constructor时,先在u1自身找,u1中没有constructor,则通过[[Prototype]]顺着原型找;             2. 原型是一个空的对象,里面也没有,再顺着原型链找,它的原型是Object.prototype,在此原型中有constructor,指向的是Object构造函数。             3. 则 const u2 = new u1.constructor('lisi');相当于 const u2 = new Object('lisi');             4. 创建出的u2中没有name属性,所以显示undefined   更改:向User.prototype中添加constructor属性,使其指向User构造函数 此时,先找u1中constructor,没有; 顺着原型链找,在User.prototype中找到了constructor 则 const u2 = new u1.constructor('lisi');相当于 const u2 = new User('lisi');   new User('lisi')执行过程: 创建一个空对象,将this设置为该对象; 执行构造函数中代码,this.name = name 即为该对象添加一个name属性,属性值为传进去的'lisi'; 则空对象中就有一个属性name,将该对象的地址赋值给变量u2

标签:name,u1,JS,constructor,new,prototype,属性
From: https://www.cnblogs.com/ahoge/p/16833661.html

相关文章

  • 如何用webgl(three.js)搭建一个3D库房,3D仓库3D码头,3D集装箱,车辆定位,叉车定位可视
    序又是快两个月没写随笔了,长时间不总结项目,不锻炼文笔,一开篇,多少都会有些生疏,不知道如何开篇,如何写下去。有点江郎才尽,黔驴技穷的感觉。写随笔,通常三步走,第一步,......
  • JSONObject没有parseObject方法
    一定是你引入的包不对,你把上面的import删掉,重新导入包就可以了。在这之前加入依赖:`net.sf.json-libjson-lib2.4<dependency><groupId>com.alibaba</groupId>......
  • [JSOI2010]连通数
    传送地址:https://www.luogu.com.cn/problem/P4306题目描述度量一个有向图连通情况的一个指标是连通数,指图中可达顶点对个的个数。如图顶点 11 可达 1,2,3,4,51......
  • js正则表达式
    正则表达式概述:正则表达式是运用于验证一种表达式,他在js中是一个对象,被称为正则对象,对应的正则对象存在对应相关的元字符。我只需要了解相关元字符及对应的可以书写一些......
  • vue2 使用video.js
    页面内使用//外层div<divclass="video-class"v-if="isShowVideoDialog"><!--<videowidth="100%"height="100%"controls:src="playUrl"></video>--><video......
  • vue.config.js 学习记录
    Vue-cli4将webpack深度集成,不对外展示webpack具体配置,在vue.config.js中可以更改配置:Vue.config.js的基本内容为:module.exports={ publicPath:'/smart-dispa......
  • js-webuploader+js如何实现分片+断点续传
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。首先我们需要了解的是上传文件三要素:1.表单提交方式......
  • js判断一个变量是否存在值得简单方法
    在编码过程中,有时候我们需要对一个变量判断其是否有值,这里有一种比较不错的方法判断:!!variable//返回True为存在值,返回False为不存在值注意是双感叹号“!!”示例......
  • 【js】元素是否在可视区范围内
    公式:元素到顶部距离(最近的具有定位父级元素)- 滚动条高度 <=可视区的高度  offsetTop、scrollTop  <!DOCTYPEhtml><htmllang="en"><head><me......
  • nodejs实现jwt
    jwt是jsonwebtoken的简称,本文介绍它的原理,最后后端用nodejs自己实现如何为客户端生成令牌token和校验token1.为什么需要会话管理我们用nodejs为前端或者其他服务提供......