首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript中的原型继承惯例

在JavaScript中,原型继承是一种实现对象间继承的方法。它通过将对象的原型属性设置为另一个对象,从而使得对象可以访问另一个对象的属性和方法。原型继承是JavaScript中的一种基本概念,但它也是一种比较复杂的概念,因为它涉及到对象的原型链和原型对象的创建等问题。

在JavaScript中,每个对象都有一个原型属性,这个属性指向该对象的原型对象。当我们试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的末端。

原型继承的惯例是指,当我们想要创建一个新的对象,并且希望这个对象可以访问另一个对象的属性和方法时,我们可以将新对象的原型属性设置为另一个对象。这样,新对象就可以访问另一个对象的属性和方法了。

例如,我们可以创建一个名为“Person”的对象,并且定义一些属性和方法。然后,我们可以创建一个名为“Student”的对象,并将其原型属性设置为“Person”对象。这样,“Student”对象就可以访问“Person”对象的属性和方法了。

需要注意的是,原型继承也存在一些缺点,例如原型对象的属性是被所有实例共享的,这可能会导致一些意想不到的问题。因此,在实际开发中,我们可能会使用其他的继承方式,例如类继承或构造函数继承等。

总之,原型继承是JavaScript中实现对象间继承的一种方法,它通过设置对象的原型属性来实现对其他对象的属性和方法的访问。虽然原型继承存在一些缺点,但它仍然是JavaScript中的一种重要概念,可以帮助我们更好地理解对象的原型链和原型对象的创建等问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

《现代Javascript高级教程》JavaScript原型继承

不同于传统基于类继承JavaScript类和继承是基于原型链模型。在ES2015/ES6引入了class关键字,但其本质仍然是基于原型语法糖。...原型(Prototype) 原型(Prototype)是JavaScript对象一个特殊属性,它用于实现属性和方法继承。...在JavaScript,每个对象都有一个原型属性,它指向另一个对象,这个对象被称为原型对象。通过原型链,对象可以从原型对象继承属性和方法。...通过构造函数,我们可以创建对象实例,并且这些实例可以通过原型对象继承原型属性和方法。 原型原型链是 JavaScript 对象之间通过原型链接起来机制,用于实现属性和方法继承。...原型继承 原型继承是一种通过继承原型对象来创建新对象方式。在 JavaScript ,我们可以使用多种方式实现原型继承

20640

JavaScript原型继承

(在 ES2015/ES6 引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型)。 当谈到继承时,JavaScript 只有一种结构:对象。...几乎所有 JavaScript 对象都是位于原型链顶端 Object 实例。 尽管这种原型继承通常被认为是 JavaScript 弱点之一,但是原型继承模型本身实际上比经典模型更强大。...例如,在原型模型基础上构建经典模型相当简单。 ---- 基于原型继承 继承属性 JavaScript 对象是动态属性“包”(指其自己属性)。...在 JavaScript 里,任何函数都可以添加到对象上作为对象属性。函数继承与其他属性继承没有差别,包括上面的“属性遮蔽”(这种情况相当于其他语言方法重写)。...当继承函数被调用时,this 指向是当前继承对象,而不是继承函数所在原型对象。

50910

JavaScript原型继承

什么是原型继承?在JavaScript,每个对象都有一个原型(prototype),原型本身也是一个对象。...当我们访问一个对象属性或方法时,如果该对象本身没有该属性或方法,JavaScript会自动去它原型对象查找。...如果原型对象也没有找到,JavaScript会继续在原型对象原型上查找,这样形成了一个原型链。原型继承是基于原型继承机制。通过将一个对象原型指向另一个对象,从而实现对属性和方法继承。...当我们在一个对象上调用属性或方法时,如果该对象本身没有该属性或方法,JavaScript会在原型链上继续向上查找,直到找到对应属性或方法或者到达原型末尾。...在构造函数初始化实例属性:由于原型继承无法在子对象传递参数给父对象构造函数,如果需要在构造函数初始化实例属性,应该在子对象构造函数中进行处理。

35110

JavaScript继承原型

基于原型继承 继承属性 JavaScript对象是动态JavaScript对象其实就是动态变量属性容器,也就是键值对容器。...每个JavaScript对象都有一个指向一个原型对象链,当试图访问一个对象属性时,浏览器会首先在该对象键值对寻找该属性,如果没有找到,就会沿着原型链搜寻,依次层层向上,直到找到该属性或者寻找到最顶端...可以看看emp原型链,体会一下 继承方法 JavaScript并没有其他面向对象语言所定义方法。...在JavaScript当中,任何函数都可以作为对象属性,函数继承与其他属性继承没有区别,包括对属性重写。...这是 JavaScript 唯一一个处理属性并且不会遍历原型方法。 下面的实例运行分别为true、true、false、true。

14320

JavaScript继承原型

这个原型对象也有一个自己原型属性,指向它构造函数原型对象,层层向上直到一个对象原型对象为null,根据定义,null没有原型,并作为这个原型最后一个环节。...[[Prototype]]指向Object.prototypenull位于原型顶端,根据定义,null就是没有原型继承属性JavaScript对象是动态属性“包”,它有一个指向它原型链。...--> Object.prototype --> null使用构造器创建对象在JavaScript,构造器其实就是一个普通函数。...可以调用这个方法来创建一个新对象。新对象原型就是这个方法传入第一个参数。...使用基于类语言开发人员会对这些结构感到熟悉。但它们是不同JavaScript仍然基于原型

43040

Prototypal Inheritance with Javascript-JavaScript原型继承(基础概念篇)

大多数读者都熟悉传统继承(如C++,Java,C#继承)。但是当他们尝试理解JavaScript继承(原型继承)时,传统继承可能会造成一定程度困扰。...这不过是语法甜点,给了传统面向对象开发者‘在JavaScript他们能实现类继承错觉’。最重要是“在JavaScript所有的继承 都是使用原型继承实现”。...这是因为: JavaScript是没有类(所有传统面向对象语言都依赖类这个基本概念)。 所有的继承最终都是通过原型链来实现。 在JavaScript只是模拟了传统继承。...什么是原型继承? 在JavaScript,所有的对象都包含一个内部object property,被称之为prototype。...JavaScript 继承实现 是靠2个重要概念: 遍历原型链 - 如果JavaScript找不到指定property/method,那么它会查找对象原型

41420

JavaScript原型链与继承

__proto__); // 结果为null 通过上面的示例, 发现开始一句话其实是错误. JS世界只有一个对象没有原型对象,这个对象就是Object.prototype。...JavaScript函数是一等公民,函数是对象。函数也是对象,只不过自己能()执行。...1001,19); for(var key in xiaohong){ console.log(key); } console.log(xiaohong); 方法都在构造函数定义, 只能继承父类实例属性和方法...,不能继承原型属性/方法,无法实现函数复用,每个子类都有父类实例函数副本,影响性能 3....组合继承 就是将原型继承和构造函数继承组合在一起;继承两个优点 通过调用父类构造,继承父类属性并保留传参优点, 然后再通过将父类实例作为子类原型,实现函数复用 function People(name

1.5K50

Javascript原型继承,说清楚

一直以来对Javascript原型原型链、继承等东西都只是会用和了解,但没有深入去理解这门语言关于继承这方面的本质和特点。闲暇之余做理解和总结,欢迎各位朋友一起讨论。...function Child(){ Parent.call(this) this.Age = 'Age' } Child.prototype = Parent.prototype; //原型继承...;右侧为第二段 从上图可以看出第一段代码原型链只有两层,也就是Child和Parent共用一层原型链,第二段代码原型链有三层,Child、Parent、Object。...如果是多级继承,第一段代码模式原始链始终只有两层,而第二段代码模式原型会有层级关系。...原因:function被实例化时,先创建一个对象,然后复制function构造器prototype属性上所有内容到__proto__(后续原型链),如果复制是一个对象,这个对象也有自己原型链(

48590

如果使用 JavaScript 原型实现继承

作者:Indermohan Sing 译者:前端小智 来源:blog 在这篇文章,我们将讨论原型以及如何在 JS 中使用它们进行继承。我们还将会看到原型方法与基于类继承有何不同。...重用SmartPhone类功能,这就是继承作用,继承也是重用其他类/对象功能一种方式。...例如,类C继承自类B,而类B继承自类A 值得注意是,类本身并没有做任何事情。在从类创建对象之前,实际上没有完成任何工作。我们将看到它为什么不同于JavaScript。...原型是什么? 在 JS ,所有对象都有一个特殊内部属性,该属性基本上是对另一个对象引用。 此引用取决于对象创建方式。...使用原型继承各种方法 在 JS ,无论我们如何创建对象,只有原型继承,但这些方式还有一些区别,来看看: 对象字面量 在JavaScript创建对象最简单方法是使用对象字面量: let obj =

66920

深入理解javascript继承机制(1)原型继承机制将共有的属性放进原型

javascript继承机制是建立在原型基础上,所以必须先对原型有深刻理解,笔者在之前已经写过关于js原型文章。...这就可以理解为,new出来对象继承拥有了了它构造函数原型对象,这就隐约有一点继承概念了。 原型继承机制 原型概念就是多个这样对象通过proto相互关系起来 ?...; 这样我们就实现了原型继承关系。...将共有的属性放进原型 如上个例子,name属性是三对象共有的,上个例子每个单独对象都会new出一个name属性,这样就造成了对空间浪费。...所以在某些时候,就没法使用这种继承模式,这种将共享属性移到原型模式,会产生子对象覆盖掉父对象共有属性缺陷。

51420

JavaScript原型继承在使用存在安全问题

JavaScript原型很多人都知道也很好用,但是很多人在使用原型继承中导致安全问题却很少人知道,接下来我们就来好好了解一下。...在真实开发,我们经常会在代码中使用Property accessors 属性访问器,并且使用用户输入参数去访问某个对象属性。...这看起来可能是一个很稀疏平常操作,但是往往在这个过程我们代码就已经产生了一个很大安全漏洞!!!为什么这样写代码会产生安全问题?...假设黑客知道你代码在运行时会创建一个新对象,并且你没有使用Object.create(null)创建一个没有原型对象。...在代码减少属性访问器使用尽可能使用.方式去访问对象属性或者使用 Map或Set,来代替我们对象检查对象原型链,查看新创建对象原型是否被恶意添加了原本不该有的属性,或者属性被修改检查用户输入

16711

JavaScript原型继承与盗用构造函数继承

---- theme: channing-cyan 这是我参与8月更文挑战第6天,活动详情查看:8月更文挑战 昨天我们讲解了原型原型链,今天我们说一下继承,顺便再重温一下原型链 什么是继承 继承这个词比较容易理解...这个就是继承。我们直接上干货。 原型继承 原型继承是js主要继承方式,它基本思想就是通过原型继承多个引用类型属性和方法。...这样一来,SubType 实例不仅能从 SuperType 实例中继承属性和方法,而且还与 SuperType 原型挂上了钩。...所有输出是true。 原型搜索机制就是在读取实例上属性时,首先在自身实例上进行搜索,如果没找到,就会通过继承方式继续搜索,搜索是向上。...对于属性和方法一直会持续到原型链末端 原型链虽然是比较强大继承实现工具,但是它里面所有的引用值都是实例间共享,而且子类不能向父类传参,一般原型链也不会被单独使用,我们可以通过盗用构造函数配合来解决这些问题

38520

Javascript 类、原型链、继承理解

(以下不讨论ES6利用class、extends关键字来实现类和继承;实质上,ES6class、extends关键字是利用语法糖实现Javascript灵活到甚至可以实现接口封装(类似Java...在Javascript,每当我们定义一个构造函数,Javascript引擎就会自动为这个类添加一个prototype(也被称作原型) 2.对象 proto 是什么?    ...在Javascript,每当我们使用new创建一个对象时,Javascript引擎就会自动为这个对象添加一个__proto__属性,并让其指向其类prototype // 代码3.2 function...,并且它们都等于Human.prototype,我们知道在Javascript引用类型相等意味着他们所指向是同一个对象。...这就是Javascript著名原型结果啦。话不多说,先上图: ? 当我们访问person.name时,发生了什么呢?

63510

【说站】javascript原型继承使用

javascript原型继承使用 说明 1、即使不自定义类型,也可以通过原型实现对象之间信息共享。 2、原型继承非常适合不需要单独创建构造函数场合,当仍然需要在对象之间共享信息时。...但是要记住,属性包含引用值总是会在相关对象之间共享,和使用原型一样。... object(o) {    function F() {}    F.prototype = o;    return new F();} 这个object()函数将创建一个临时构造函数,并将传入对象赋予该构造函数原型...以上就是javascript原型继承使用,希望对大家有所帮助。...更多Javascript学习指路:Javascript 推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。 收藏 | 0点赞 | 0打赏

30410
领券