JavaScript原型与原型链

本文介绍了JavaScript中的构造函数及new命令的工作原理,探讨了如何使用构造函数创建对象实例,并详细解析了原型与原型链的概念及其工作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型
JavaScript的数据类型可以分为基本数据类型和引用数据类型。
1. 基本数据类型(6种)
- String
- Number
- Boolean
- null
- undefined
- Symbol(ES6)
2. 引用数据类型
- Object


二、面向对象编程


  1. 构造函数
    • 面向对象编程的第一步,就是要生成对象。前面说过,对象是单个实物的抽象。通常需要一个模板,表示某一类实物的共同特征,然后对象根据这个模板生成。
    • JavaScript 语言使用构造函数(constructor)作为对象的模板。所谓”构造函数”,就是专门用来生成实例对象的函数。它就是对象的模板,描述实例对象的基本结构。一个构造函数,可以生成多个实例对象,这些实例对象都有相同的结构。
    • 构造函数就是一个普通的函数,为了与普通函数区别,构造函数名字的第一个字母通常大写。
      构造函数的特点有两个。
      - 函数体内部使用了this关键字,代表了所要生成的对象实例。
      - 使用new命令生成对象。

**2. new命令** new命令的作用,就是执行构造函数,返回一个实例对象。 new 命令的原理
  1. 创建一个空对象,作为将要返回的对象实例。
  2. 将这个空对象的原型,指向构造函数的prototype属性。
  3. 将这个空对象赋值给函数内部的this关键字。
  4. 开始执行构造函数内部的代码。

如果构造函数内部有return语句,而且return后面跟着一个对象,new命令会返回return语句指定的对象;否则,返回this对象。

var Fn=function(){
    this.name='xxx';
    this.old=18;
}
var f1=new Fn();
console.log(f1.name);//xxx
console.log(f1.old);//18

上面代码通过new命令,让构造函数Fn生成一个实例对象,保存在变量f1中。这个新生成的实例对象,从构造函数Fn得到了name和old属性。new命令执行时,构造函数内部的this,就代表了新生成的实例对象,this.name和this.old是实例对象的属性。

var Fn2=function(){
    name='xxx';
    old=18;
}
var f2=new Fn2();
console.log(f2.name);//undefined
console.log(f2.old);//undefined
f2.name='yyy';
console.log(f2.name);//yyy

三、原型与原型链

对象是函数创建的,而函数却又是一种对象。也是属性的集合,可以对函数进行自定义属性。
每个函数都有一个属性叫做prototype。
这个prototype的属性值是一个对象,默认的只有一个叫做constructor的属性,指向这个函数本身。

var Fn=function(){
    this.name='xxx';
    this.old=18;
}

383c2593-d64d-4f43-b513-1ad8c252aa29.png

回到上面new命令的原理的第二条,从这张图可以看到对象的原型,指向构造函数的prototype属性。

f1.__proto__指向构造函数的prototype属性,就是对象的原型。所以f1.__proto__===Fn.prototype为true

prototype的属性值是一个对象,默认的只有一个叫做constructor的属性,指向这个函数本身。

  • 029084da-917f-40e5-bea7-393ec5993b63.png

    左边为Fn函数,右边就是它的原型

在上面可以看到f1.__proto__===Fn.prototype的结果为true
__proto__就是指向构造函数的prototype属性,Fn.prototype就是对象的原型

即,每个由构造函数创建的对象都有一个proto属性,指向创建该对象的函数的prototype。

基于以上,我们得到一个重要的公式
var 对象名 = new 函数名()
对象名.__proto__=== 函数名.prototype

小结
1. 自定义函数.__proto__指向Function.prototype
2. Object.__proto__指向Function.prototypeObject.__proto__ === Function.prototype//true
3. Function.__proto__指向Function.prototype:Function也是一个函数,函数是一种对象,也有__proto__属性。既然是函数,那么它一定是被Function创建。所以Function是被自身创建的。所以它的__proto__指向了自身的Prototype。

  1. Function.prototype.__proto__===Object.prototype//true
  2. Object.prototype的__proto__指向的是null

总结
1. 对象是函数创建的,而函数却又是一种对象。也是属性的集合
2. 每个函数都有一个属性叫做prototype。
3. 对象的原型,指向构造函数的prototype属性。
4. prototype的属性值是一个对象,默认的只有一个叫做constructor的属性,指向这个函数本身。
5. 原型既然作为对象,属性的集合,可以自定义的增加许多属性。

总之记住下面这几个要点
1. Object对象是由Function函数创建的
2. 所有函数都是由Function创建的,函数也是对象
3. 重要的公式
- var 对象名 = new 函数名()
- 对象名.__proto__=== 函数名.prototype
4. 普通函数的prototype属性值是一个对象
5. Function.prototype有__proto__这个属性
6. Object.prototype.__proto__===null结果为true

内容概要:该论文聚焦于T2WI核磁共振图像超分辨率问题,提出了一种利用T1WI模态作为辅助信息的跨模态解决方案。其主要贡献包括:提出基于高频信息约束的网络框架,通过主干特征提取分支和高频结构先验建模分支结合Transformer模块和注意力机制有效重建高频细节;设计渐进式特征匹配融合框架,采用多阶段相似特征匹配算法提高匹配鲁棒性;引入模型量化技术降低推理资源需求。实验结果表明,该方法不仅提高了超分辨率性能,还保持了图像质量。 适合人群:从事医学图像处理、计算机视觉领域的研究人员和工程师,尤其是对核磁共振图像超分辨率感兴趣的学者和技术开发者。 使用场景及目标:①适用于需要提升T2WI核磁共振图像分辨率的应用场景;②目标是通过跨模态信息融合提高图像质量,解决传统单模态方法难以克服的高频细节丢失问题;③为临床诊断提供更高质量的影像资料,帮助医生更准确地识别病灶。 其他说明:论文不仅提供了详细的网络架构设计实现代码,还深入探讨了跨模态噪声的本质、高频信息约束的实现方式以及渐进式特征匹配的具体过程。此外,作者还对模型进行了量化处理,使得该方法可以在资源受限环境下高效运行。阅读时应重点关注论文中提到的技术创新点及其背后的原理,理解如何通过跨模态信息融合提升图像重建效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值