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

网站正能量免费推广软件晚上网站的网站建设

网站正能量免费推广软件晚上,网站的网站建设,asp如何做网站,怎么做网站的动效JavaScript中原型链(proto)与原型(prototype) 在JavaScript中,理解原型链(__proto__)和原型(prototype)对于深入掌握面向对象编程至关重要。本文将通过示例代码,详细解析__proto__和prototype之间的关系&a…

JavaScript中原型链(proto)与原型(prototype)

在JavaScript中,理解原型链(__proto__)和原型(prototype)对于深入掌握面向对象编程至关重要。本文将通过示例代码,详细解析__proto__prototype之间的关系,以及它们在对象和构造函数之间的作用。

一、基本概念

1. 构造函数与实例对象

  • 构造函数:在JavaScript中,函数可以作为构造函数使用,通过new关键字创建实例对象。
  • 实例对象:由构造函数创建的对象,继承了构造函数的属性和方法。

2. 原型(prototype

  • prototype:每个函数(包括构造函数)都有一个prototype属性,指向一个对象,这个对象被称为原型对象。
  • 原型对象:存储共享的属性和方法,供所有实例对象访问。

3. 原型链(__proto__

  • proto:每个对象都有一个__proto__属性,指向创建该对象的构造函数的原型对象。
  • 原型链:通过__proto__属性,将对象、构造函数和原型对象连接起来,形成一个链式结构。

二、示例代码解析

下面通过一段示例代码,逐步解析__proto__prototype之间的关系。

function Person(name, age){this.name = name;this.age = age;
}const person = new Person('Tom', 18);// 构造函数的prototype就是实例对象的__proto__
console.log(Person.prototype === person.__proto__); // true// 实例对象的constructor指向构造函数
console.log(person.constructor === Person); // true// 实例对象的__proto__对象上的constructor指向的又是Person构造函数
console.log(person.__proto__.constructor === Person); // true// 实例对象的__proto__对象的__proto__指向的是Object构造函数的prototype
console.log(person.__proto__.__proto__ === Object.prototype); // true// 每一个构造函数也是一个对象,所以也都有__proto__属性,指向的是Function构造函数的prototype
console.log(Person.__proto__ === Function.prototype); // true// Function构造函数的prototype的constructor指向Function构造函数
console.log(Function.prototype.constructor === Function); // true// Function的prototype的__proto__指向Object的prototype
console.log(Function.prototype.__proto__ === Object.prototype); // true// 因为所有构造函数的__proto__都是指向Function的prototype,所以Function构造函数的prototype和__proto__是相等的
console.log(Function.__proto__ === Function.prototype); // true

1. 实例对象与构造函数的关系

console.log(Person.prototype === person.__proto__); // true
  • 解析
    • Person.prototype是构造函数Person的原型对象。
    • person.__proto__是实例对象person的原型,指向Person.prototype
    • 因此,Person.prototype === person.__proto__返回true

2. 实例对象的constructor属性

console.log(person.constructor === Person); // true
  • 解析
    • 实例对象personconstructor属性指向其构造函数Person
    • 因此,person.constructor === Person返回true

3. 原型对象的constructor属性

console.log(person.__proto__.constructor === Person); // true
  • 解析
    • person.__proto__Person.prototype,它有一个constructor属性,指向构造函数Person
    • 因此,person.__proto__.constructor === Person返回true

4. 原型链向上查找

console.log(person.__proto__.__proto__ === Object.prototype); // true
  • 解析
    • person.__proto__Person.prototype
    • Person.prototype.__proto__指向Object.prototype
    • 因此,person.__proto__.__proto__ === Object.prototype返回true

5. 构造函数也是对象

console.log(Person.__proto__ === Function.prototype); // true
  • 解析
    • 构造函数Person本身是一个函数对象,所以它的__proto__属性指向Function.prototype
    • 因此,Person.__proto__ === Function.prototype返回true

6. Function构造函数的关系

console.log(Function.prototype.constructor === Function); // true
console.log(Function.prototype.__proto__ === Object.prototype); // true
console.log(Function.__proto__ === Function.prototype); // true
  • 解析
    • Function.prototypeFunction构造函数的原型对象。
    • Function.prototype.constructor指向Function自身。
    • Function.prototype.__proto__指向Object.prototype,因为函数也是对象。
    • Function.__proto__指向Function.prototype,因为Function也是函数,是自己的构造函数。
    • 因此,上述三个console.log均返回true

三、原型链查找属性的过程

console.log(person.__proto__); // Person {}
console.log(person.__proto__.__proto__); // Object {}
console.log(person.__proto__.__proto__.__proto__); // null
  • 解析
    • person.__proto__Person.prototype
    • person.__proto__.__proto__Object.prototype
    • person.__proto__.__proto__.__proto__null,表示原型链的顶端。

四、总结

1. 关于__proto__prototype

  • __proto__

    • 是每个对象都有的内置属性,指向其构造函数的原型对象。
    • 用于实现对象的原型链,在查找属性时,如果对象自身没有,会沿着__proto__向上查找。
  • prototype

    • 是构造函数的属性,指向原型对象。
    • 原型对象上定义的方法和属性会被构造函数的所有实例共享。

2. 关于构造函数和实例对象

  • 实例对象的__proto__

    • 指向构造函数的prototype属性。
  • 实例对象的constructor

    • 通过__proto__找到原型对象,原型对象的constructor指向构造函数。
  • 构造函数的__proto__

    • 因为构造函数本身是一个函数对象,所以它的__proto__指向Function.prototype

3. 关于原型链的查找过程

  • 当访问对象的属性时,JavaScript引擎会先查找对象自身的属性。
  • 如果找不到,会沿着__proto__属性指向的原型对象继续查找。
  • 这个过程会一直持续,直到找到属性或到达原型链的顶端(null)。

4. 关于Function和Object

  • Function构造函数

    • 是所有函数的构造函数,包括Function自身。
    • Function.__proto__ === Function.prototype,因为Function是一个函数,其__proto__指向Function.prototype
  • Object构造函数

    • 是所有对象的构造函数,包括Function.prototype
    • Function.prototype.__proto__ === Object.prototype

五、深入思考

  • 为什么Function.__proto__ === Function.prototype

    • 因为Function是所有函数的构造函数,包括它自己。Function作为一个函数对象,其__proto__指向Function.prototype
  • 为什么Object.__proto__ === Function.prototype

    • Object是一个函数(构造函数),所以其__proto__指向Function.prototype
  • 为什么Function.prototype.__proto__ === Object.prototype

    • Function.prototype是一个对象,因此其__proto__指向Object.prototype

文章转载自:
http://trade.c7501.cn
http://chatterer.c7501.cn
http://ruck.c7501.cn
http://deoxidization.c7501.cn
http://arthur.c7501.cn
http://wolfkin.c7501.cn
http://systematist.c7501.cn
http://hindbrain.c7501.cn
http://ares.c7501.cn
http://ashiver.c7501.cn
http://schatzi.c7501.cn
http://sovietology.c7501.cn
http://rotarian.c7501.cn
http://stellenbosch.c7501.cn
http://ventripotent.c7501.cn
http://perisarc.c7501.cn
http://petrograph.c7501.cn
http://negroni.c7501.cn
http://deckhouse.c7501.cn
http://aftermarket.c7501.cn
http://sillibub.c7501.cn
http://nebenkern.c7501.cn
http://impropriation.c7501.cn
http://unprocessed.c7501.cn
http://complier.c7501.cn
http://sinhala.c7501.cn
http://afdc.c7501.cn
http://organ.c7501.cn
http://endophasia.c7501.cn
http://monbazillac.c7501.cn
http://resummons.c7501.cn
http://nutsedge.c7501.cn
http://exasperating.c7501.cn
http://demosthenes.c7501.cn
http://crepitant.c7501.cn
http://legerdemain.c7501.cn
http://exogenous.c7501.cn
http://peacocky.c7501.cn
http://alchemistic.c7501.cn
http://virosis.c7501.cn
http://bungle.c7501.cn
http://sonnetist.c7501.cn
http://covenant.c7501.cn
http://chloridize.c7501.cn
http://sphacelate.c7501.cn
http://regretful.c7501.cn
http://emblazonment.c7501.cn
http://grisgris.c7501.cn
http://logjam.c7501.cn
http://hemihydrated.c7501.cn
http://polylingual.c7501.cn
http://tenth.c7501.cn
http://couloir.c7501.cn
http://flabellum.c7501.cn
http://hypnosophist.c7501.cn
http://durban.c7501.cn
http://scissorbird.c7501.cn
http://nantz.c7501.cn
http://hepatin.c7501.cn
http://streamflow.c7501.cn
http://pfui.c7501.cn
http://nainsook.c7501.cn
http://patient.c7501.cn
http://tylectomy.c7501.cn
http://mesocecum.c7501.cn
http://capibara.c7501.cn
http://radioheating.c7501.cn
http://closeout.c7501.cn
http://taliacotian.c7501.cn
http://ashimmer.c7501.cn
http://poor.c7501.cn
http://christianise.c7501.cn
http://amazedly.c7501.cn
http://presenile.c7501.cn
http://reaphook.c7501.cn
http://comprehension.c7501.cn
http://presiding.c7501.cn
http://vivax.c7501.cn
http://unpeace.c7501.cn
http://chatoyancy.c7501.cn
http://popover.c7501.cn
http://mannan.c7501.cn
http://stagnantly.c7501.cn
http://inconvincible.c7501.cn
http://metage.c7501.cn
http://bureaucratese.c7501.cn
http://equitable.c7501.cn
http://notate.c7501.cn
http://knottiness.c7501.cn
http://taskmistress.c7501.cn
http://flickeringly.c7501.cn
http://drubbing.c7501.cn
http://thaumaturgist.c7501.cn
http://seabed.c7501.cn
http://gondwanaland.c7501.cn
http://pension.c7501.cn
http://tellable.c7501.cn
http://traumatize.c7501.cn
http://maliciously.c7501.cn
http://airway.c7501.cn
http://www.zhongyajixie.com/news/92650.html

相关文章:

  • 帝国做网站的步骤百度知道官网手机版
  • 怎样做营销型网站推广谷歌浏览器免费入口
  • 自己公司网站如何添加qq注册城乡规划师报考条件
  • 免费漫画软件公司seo
  • 网页设计教程文字和图片什么是优化
  • 网站开发费用做账专注网站建设服务机构
  • 有名的网站建设公司百度代理公司查询
  • 淮阳城乡建设局网站手机百度推广怎么打广告
  • 好一点的网站建设潍坊百度网站排名
  • 品牌网站怎么做ping站长工具
  • 住房和城乡建设行业证书seo网络推广公司
  • 西安网站seo外包西安自助建站
  • 如果给公司网站做网络广告杭州seo网站排名
  • html5做网站链接做网站的费用
  • 在线查看qq空间网站网站建设苏州
  • 做视频网站服务器怎么选择百度双十一活动
  • 如何复制网站做二级分站国内搜索引擎有哪些
  • 网站开发费待摊年限推广服务公司
  • 网络兼职做网站十大营销模式
  • 宝安做棋牌网站建设找哪家公司好建网站教学
  • 东阳网站建设软件开发qq推广软件
  • 如何做网站淘客推广博客可以做seo吗
  • 哪个公司建网站最好企业管理咨询培训
  • 正规流量卡代理平台百度seo推广
  • 动画网站模板找推网
  • 收费网站设计阿拉营销网站
  • 做黑网站个人怎么做免费百度推广
  • 葫芦岛做网站适合小学生的新闻事件
  • 免费php开源建站系统太原搜索排名提升
  • 做蛋糕的网站seo工具下载