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

蓝色的网站360seo

蓝色的网站,360seo,vps怎么做多个网站,dede装修网站模板文章目录 前言1. 原型2. 原型链3. __proto__ 与 Object.getPrototypeOf()‌‌4. 构造函数的 prototype 属性与实例的 __proto__‌5. 原型链的终点6. 继承7. 验证原型的方法总结 前言 在 JavaScript 中,每个对象(除了null)都有一个与之关联的…

文章目录

  • 前言
  • 1. 原型
  • 2. 原型链
  • 3. `__proto__` 与 `Object.getPrototypeOf()‌`
  • ‌4. 构造函数的 prototype 属性与实例的 `__proto__‌`
  • 5. 原型链的终点
  • 6. 继承
  • 7. 验证原型的方法
  • 总结


前言

在 JavaScript 中,每个对象(除了null)都有一个与之关联的原型(prototype)对象。原型对象也是一个对象,它包含可以由特定对象共享的属性和方法。当我们试图访问一个对象的属性时,如果该对象自身没有这个属性,那么 JavaScript 引擎会去该对象的原型上查找,如果原型对象上也没有,那么就会去原型的原型上查找,如此层层向上,直到找到一个匹配的属性或到达原型链的末端(null)。这种查找机制所形成的链式结构被称为原型链。


1. 原型

  • 每个函数(除了箭头函数)都有一个 prototype 属性,这个属性指向一个对象,称为原型对象。
  • 当使用 new 关键字调用构造函数创建实例时,该实例的内部指针(__proto__,现在更推荐使用 Object.getPrototypeOf(obj))会指向构造函数的 prototype 对象。
function Person(name) {this.name = name;
}
// 给Person函数的原型添加方法
Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name}`);
};const person1 = new Person('Alice');
person1.sayHello(); // 输出:Hello, my name is Alice

这里,person1 是 Person 的实例。person1 本身没有 sayHello() 方法,所以它会去 Person.prototype 上查找。


2. 原型链

  • 每个对象都有一个原型对象,而原型对象本身也可能有原型对象,这样就形成了一条链。
  • 例如,person1 的原型是 Person.prototype,而 Person.prototype 也是一个对象,它的原型是 Object.prototype(因为Person.prototype 是一个普通对象,由 Object 构造函数创建),而 Object.prototype 的原型是 null,这样就构成了一个原型链:person1 -> Person.prototype -> Object.prototype -> null。
  • 当我们访问 person1.toString() 时,查找过程如下:
    • 首先在 person1 自身查找,没有找到;
    • 然后去 Person.prototype 上查找,也没有;
    • 接着去 Object.prototype 上查找,找到了 toString 方法,于是调用它。

3. __proto__Object.getPrototypeOf()‌

  • __proto__(注意:前后各两个下划线)是对象的一个内部属性,它指向该对象的原型。虽然它在很多环境中可用,但并不是标准的一部分,因此更推荐使用 Object.getPrototypeOf(obj) 来获取对象的原型。
  • 使用 Object.setPrototypeOf(obj, prototype) 可以设置对象的原型,但修改对象的原型可能会带来性能问题,因此应谨慎使用。

‌4. 构造函数的 prototype 属性与实例的 __proto__‌

构造函数的 prototype 属性在创建实例时会被赋值给实例的 __proto__。即:instance.__proto__ === Constructor.prototype

5. 原型链的终点

所有原型链的终点都是 Object.prototype,它是所有对象的原型。而 Object.prototype 的原型是 null。

6. 继承

JavaScript 的继承是通过原型链实现的。子类的原型对象指向父类的一个实例,从而继承父类的属性和方法。

例如,实现继承的一种方式(不推荐使用,仅作为示例):

function Animal(name) {this.name = name;
}
Animal.prototype.speak = function() {console.log(`${this.name} makes a noise.`);
};function Dog(name) {Animal.call(this, name); // 调用父类构造函数
}
// 设置Dog的原型为Animal的实例
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; // 修复构造函数指向Dog.prototype.bark = function() {console.log(`${this.name} barks.`);
};const dog = new Dog('Rex');
dog.speak(); // 继承自Animal: Rex makes a noise.
dog.bark();  // Rex barks.

在这个例子中,Dog 继承了 Animal。Dog 的实例 dog 的原型链是:dog -> Dog.prototype(也是Animal的一个实例)-> Animal.prototype -> Object.prototype -> null。

注意:现代JavaScript中,更推荐使用 class 和 extends 关键字来实现继承,但其底层仍然是基于原型链。

7. 验证原型的方法

instanceof‌:检测构造函数的 prototype 是否在对象的原型链上。

console.log(alice instanceof Person); // true
console.log(alice instanceof Object); // true

Object.getPrototypeOf()‌:获取对象的 [[Prototype]]。

console.log(Object.getPrototypeOf(alice) === Person.prototype); // true

isPrototypeOf()‌:检测对象是否在另一个对象的原型链上。

console.log(Person.prototype.isPrototypeOf(alice)); // true

总结

  • 原型(prototype)是函数对象的一个属性,它指向一个对象,该对象包含可以由该函数创建的所有实例共享的属性和方法。
  • 每个对象都有一个原型对象(通过 __proto__ 或 Object.getPrototypeOf 访问),对象从原型对象继承属性和方法。
  • 原型链是由原型对象通过 __proto__ 连接起来的链,用于实现属性和方法的查找和继承。

文章转载自:

http://9asSbdxl.ybhrb.cn
http://E1v4wwaI.ybhrb.cn
http://JERWtUkq.ybhrb.cn
http://9SwZ18zM.ybhrb.cn
http://e1VZQ1yu.ybhrb.cn
http://5oPZ0aKL.ybhrb.cn
http://0D50MpRH.ybhrb.cn
http://JlgnSdFD.ybhrb.cn
http://qbLtEk1P.ybhrb.cn
http://oVACmvJW.ybhrb.cn
http://7CFmlq6i.ybhrb.cn
http://DshKoDe5.ybhrb.cn
http://gH0PSd07.ybhrb.cn
http://F08whbK4.ybhrb.cn
http://f8naah9k.ybhrb.cn
http://AEHl08vF.ybhrb.cn
http://WX1gWYQh.ybhrb.cn
http://uCv0mfEh.ybhrb.cn
http://iEyXQ35l.ybhrb.cn
http://xRYGTLD1.ybhrb.cn
http://5HYmKvJ0.ybhrb.cn
http://KeqjcWdW.ybhrb.cn
http://2th5ZvxB.ybhrb.cn
http://z4naGIij.ybhrb.cn
http://dAKBEj9Y.ybhrb.cn
http://1YHpeP5t.ybhrb.cn
http://RBrH0ElQ.ybhrb.cn
http://ymVREkdO.ybhrb.cn
http://SgnVmGJx.ybhrb.cn
http://u5jhPE0q.ybhrb.cn
http://www.dtcms.com/wzjs/641402.html

相关文章:

  • mugeda做网站注册个人网站域名top
  • 杭州中小企业网站建设网站为什么要服务器
  • 宜春做网站网站建设介绍会发言稿
  • 中国城乡建设厅网站首页河北拟建项目网
  • 网站开发设计报告微博图片怎么做外链到网站
  • 建设厅注册中心网站考试报名费缴费电商平台搭建八个步骤
  • 网站标题的设置方法免费 网站 如何做
  • 怎么选择企业建站公司深圳设计大学
  • 保定网站设计优势怎么做网站海报
  • 通河县机场建设网站百度指数爬虫
  • 怎么用百度云做网站空间搭建网页游戏服务器
  • 商城网站带宽控制百度一下你就知道官网网址
  • 聊城哪里可以学网站建设呢ui设计师是青春饭吗
  • 如何给网站做关键字企业信用管理系统
  • 做微秀的网站中国购物平台排名
  • 如何看一个网站的好坏免费安全建网站
  • 庆元县住房和城乡建设局网站wordpress自助广告
  • 网站规划与开发实训室建设方案传媒建站推荐
  • 长春网站公司wordpress小工具里页面
  • flash网站源码带后台一键优化图片
  • 广西网络电视上海优化网站方法
  • 郑州做网站的外包公司有哪些如何规范网站使用
  • 百度关键词搜索指数查询山西网站搜索排名优化公司
  • 网站内容资源建设小程序源码在哪个平台购买
  • 网站开发不懂英语中国免费广告发布网
  • 先进的网站设计公司卢沟桥网站建设
  • 专业免费网站建设哪里便宜大理州建设局官方网站
  • 湖南建立网站营销策划wordpress自定义菜单设置
  • 网站建设盈利模式如何建立网上销售平台
  • 美食分享网站怎么做天津建设工程信息网评标专家 终审