当前位置: 首页 > news >正文

深入解析JavaScript构造函数与原型链

function foo () { 
console.log('被实例化了')foo. a   = function () {console.log (1)};  this. a = function () {console.log (2)}; a       = function () {console.log (3)}; var a   = function () {console.log (4)}; } foo. prototype. a = function () {console.log (5)}; foo. a           = function () {console.log (6)}; foo. a ();  var obj = new foo (); obj. a ();  foo. a ();

函数内部分析:

1.在函数内部将foo.a赋值为打印为1的函数

2.this.a相当于把foo这个构造函数的实例对象的a函数赋值为打印为2的函数

3.将一个未声明的a赋值为打印3的函数,相当于设置的全局变量a为打印3的函数

4.var a 赋值为4,相当于在这个函数作用域里面为打印为4的名为a的函数

5.foo.prototype.a 赋值为 5,相当于原型链上改变,如果自身没有a函数才会往上走

5.foo.a又被重新赋值为打印为6的函数

结果:

所以:

1.foo.a()  打印为 6

2.var  obj   =  new  foo() ===> 打印为 2

因为obj是foo的实例对象,实例化时,会将函数的this指向实例对象

3.重新调用foo.a。打印为1 

构造函数被实例化时,构造函数内部的代码会执行,包括函数定义和函数调用。构造函数内部定义的函数不会自动执行,需要显式调用才会执行。因此 foo.a又会重新赋值为打印1

PS:

如果需要打印为 5就

obj._proto_a() //输出5

或者设置一个实例对象obj身上不存在的属性打印为5

foo.protptype.b =  function(){ console.log('实例对象上找不到就往原型链找,5') }

obj.b()

ps:构造函数继承

如果foo(){

function c () {

 console.log('构造函数里面的局部函数') 

}

function a () {

 console.log('构造函数里面的继承函数') 

}

this. a =  a

let obj  = new foo()

此时 obj.c () 调用会报错

除非

foo.prototype.c   =   c

或者

this.c = c 

总结:在构造函数内部定义的函数,如果不通过 this 或原型显式地赋值给实例,实例将无法直接访问该函数。

http://www.xdnf.cn/news/942337.html

相关文章:

  • JavaScript 自定义对象详解
  • AI医生时代来临!o1模型在医疗诊断中超越人类医生
  • 查看进程线程的方法
  • 进制符号表示
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 信息设计漫谈
  • AIGC 基础篇 Python基础 02
  • MS8312A 车规 精密、低噪、CMOS、轨到轨输入输出运算放大器,用于传感器、条形扫描器
  • arxir网址自动转向国内镜像
  • 【DTOF传感器】光子飞行时间传感技术
  • 通信之光端机
  • 苏超 - 江苏省城市足球联赛
  • Angular中Webpack与ngx-build-plus 浅学
  • 【刷题模板】链表、堆栈
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月8日第102弹
  • 06. C#入门系列【自定义类型】:从青铜到王者的进阶之路
  • 星耀8上市品鉴暨北京中和吉晟吉利银河用户中心开业媒体见面会
  • 免费批量去水印工具 - 针对文心一言生成图片
  • DDR供电设计中的VTT与VREF作用和区别
  • leetcode Top100 189.轮转数组
  • global security market 的知识点总结 SMA
  • 给跳绳设计一双卡扣
  • Hilt在android项目中使用的注解说明
  • 设置QDialog的setModal(true)对show()无法阻塞
  • Python 训练营打卡 Day 46
  • 力扣-131.分割回文串
  • 基于fpga的疲劳驾驶检测
  • 【Autosar COM】Marvell 88Q5050 以太网交换机驱动技术解析
  • JavaScript 的意义
  • 山东大学项目实训——基于DeepSeek的智能写作与训练平台(十二)
  • cpp自学 day26(智能指针)