javaScript里的原型链

原型对象也是普通的对象,是对象一个自带隐式的__proto__属性,原型也有可能有自己的原型,如果一个原型对象的原型不为null的话,我们就称之为原型链。原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

原型对象中的属性可以被多个实例共享。原型对象存在于构造函数的属性(prototype)中,prototype的值是一个Object类型数据(对象)。

JavaScript的数据对象有哪些属性值呢,举几个简单的栗子:

writable:这个属性的值是否可以改;

configurable:这个属性的配置是否可以删除,修改;

enumerable:这个属性是否能在for...in循环中遍历出来或在Object.keys中列举出来。

value:属性值。

构建对象时将方法放于该构造函数的原型对象中,可以解决该对象创建多个实例造成的内存冗余问题。(解决内存冗余的原理就是因为原型对象中的属性可以被多个实例共享)

原型链的查找规则是这样的:在调用一个对象的属性时候,先从实例本身开始查找该属性,若能找到则直接使用,否则到该实例的原型对象中进行查找;若原型对象中无法找到则会向原型对象下的原型对象继续查找,直到找到Object基类的原型中,若还是找不到则会执行动态创建属性。(以上描述的原型对象是指__proto__属性)

在JavaScript中,有一个函数,执行对象查找时,永远不会去查找原型,这个函数就是HasOwnProperty

当为一个对象中属性赋值时,先从实例本身查找,实例中存在该属性则会覆盖实例中的属性值,否则直接在该实例中创建属性。(不会影响到原型中的同名属性)

时间: 2024-12-15 04:26:05

javaScript里的原型链的相关文章

理解JavaScript:继承与原型链

本文翻译自https://wildlyinaccurate.com/understanding-javascript-inheritance-and-the-prototype-chain Javascript里的一切几乎都是对象,每一个对象都有一个链接到其他对象的内部属性,我们称之为prototype (原型).原型对象自己也有自己的原型对象,以此类推,这时候原型链就出来了.如果你追踪原型链,你最终会到达原型为 null的内核 Object,这是原型链的终点. 原型链的作用是什么呢?当我们访问

图解JavaScript中的原型链

转自:http://www.jianshu.com/p/a81692ad5b5d typeof obj 和 obj instanceof Type 在JavaScript中,我们经常用typeof obj和obj instanceof Type来识别类型,那么两者的区别在哪?先来看两段代码 <!--typeof obj的方式判断--> <script>    var str = "toby";    console.log(typeof str);// stri

对Javascript 类、原型链、继承的理解

一.序言 ??和其他面向对象的语言(如Java)不同,Javascript语言对类的实现和继承的实现没有标准的定义,而是将这些交给了程序员,让程序员更加灵活地(当然刚开始也更加头疼)去定义类,实现继承.(以下不讨论ES6中利用class.extends关键字来实现类和继承:实质上,ES6中的class.extends关键字是利用语法糖实现的) Javascript灵活到甚至可以实现接口的封装(类似Java中的Interface和implements). 二.类的实现 1.我对类的理解 ??首先,

JavaScript继承与原型链

对于那些熟悉基于类的面向对象语言(Java 或者 C++)的开发者来说,JavaScript 的语法是比较怪异的,这是由于 JavaScript 是一门动态语言,而且它没有类的概念( ES6 新增了class 关键字,但只是语法糖,JavaScript 仍旧是基于原型). 涉及到继承这一块,Javascript 只有一种结构,那就是:对象.在 javaScript 中,每个对象都有一个指向它的原型(prototype)对象的内部链接.这个原型对象又有自己的原型,直到某个对象的原型为 null 为

JavaScript进阶之原型链

对象 1 function f1(){ 2 }; 3 typeof f1 //"function"函数对象 4 5 6 var o1 = new f1(); 7 typeof o1 //"object"普通对象 8 9 var o2 = {}; 10 typeof o2 //"object"普通对象 JavaScript中将对象分为普通对象和函数对象. 使用函数对象可以创建普通对象,普通对象没法创建函数对象. 凡是通过new Function创建

JavaScript核心-继承-原型链

继承是面向对象的编程的一大特性,很多OO语言都支持两种继承方式:接口继承和实现继承.在ECMAScript中,由于函数没有签名,所以无法实现接口继承,只有实现继承. 实现继承主要是依靠原型链来实现的. 简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而对象的每个实例都有一个指向原型对象的内部指针. 再回顾一下原型对象的用途:用途是包含可以由特定类型的所有实例共享的属性和方法. 原型对象也是一个简单的对象,如果我们让一个原型对象等于另一个

Javascript 组合继承 原型链继承 寄生继承

Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { console.log(this.name); }; function SubType(name, age) { //通过ca

夺命雷公狗---javascript NO:28 原型链

1.原型对象 在JavaScript中,每个构造器在加载后都会自动生成一个对象,我们把这个对象就称之为原型对象. 2.构造器与原型对象的关系 Person构造器与Person原型对象在内存中表现为相互独立,互不影响.但是在Person构造器中存在一个prototype属性指向Person原型对象,同时在Person原型对象中也存在一个属性指向Person构造器. 3.原型对象的作用 当我们在Person构造器的实例对象中引用一个不存在的属性或方法,系统会自动到Person构造器的原型对象中去寻找

Javascript中的原型链

说到原型链,首先得说一下对象. 在javascript中我们经常说"一切皆为对象",而对象又是属性的集合,但并不是所有的类型都是对象,undefined, number, string, boolean都属于简单的值类型,不是对象.我们所说的可以作为对象的有:数组.函数.对象.Null.New Number(). 所以函数是一种对象,但是一切对象又是函数创建的,有人可能会说不对啊,例如下面这种的,obj是对象,但是并没有函数啊. var obj = { a: 10, b: 20 };