原型链是什么样的?

原型链是怎么链接的呢?

简单说下自己的理解:

每个对象都有一个原型对象.   原型对象中存放这这个对象的属性和方法.

每个对象都有一个指针_proto_.  指向自己的原型对象.

每个对象都有一个prototype属性. 这个属性是一个对象, 存放了一些方法和属性,让原型链下游的对象来继承.

假设有a b c 三个对象,c继承b, b 继承 a , 这样就形成了一个如图的原型链.

(画得不好,但要表达的意思到了,凑合看吧)

当然,a.prototype,b.prototype ,c.prototype等等这些,  也是一个对象, 它们也有自己的原型对象.   也是用_proto_指向自己的原型对象.

说到原型这块, 就得知道new,  new发生了什么?

第一步 :  初始化一个对象  {} 

第二步 : 将这个对象的 原型对象 指向  构造器的 prototype 属性

第三步 : 构造器函数.call( {}, 参数 )  改变构造器函数中this的指针, 指向{} 这个对象, 并执行构造

                器函数

第四步 : 返回这个对象  {} .

时间: 2024-10-22 12:23:07

原型链是什么样的?的相关文章

js的原型链

开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述.有一句话说的好:如果你不能把一个很复杂的东西用最简单的话语描述出来,那就说明你没有真正的理解.最近正在读<Javascript高级程序设计>,书中对原型对象和原型链的描述让我受益匪浅,下面仅用一个对比性的例子来说明. 我们经常会这么写 function Person () { this.name = 'John'; } var person = new Person(

javascript中的构造函数和原型及原型链

纯属个人理解,有错误的地方希望大牛指出,以免误人子弟 1.构造函数: 构造函数的作用 : 初始化由new创建出来的对象    new 的作用: 创建对象(空对象) new 后面跟的是函数调用,使用new来调用函数,跟普通的直接调用函数主要的不同: 就是 this 的指向不同了 , 再就是 会自动的返回新创建的对象 什么是原型?        原型的作用:就是为了实现继承!  一个对象的原型就是它的构造函数的prototype属性的值. 在讨论原型的时候,是指的 对象和原型对关系 prototyp

JavaScript原型链问题

1. 使用new来创建对象(调用构造函数)时,如果return的是非对象(数字.字符串.布尔类型等)会忽而略返回值;如果return的是对象,则返回该对象. 2. 重写原型会切断原型链: foo = function(){ } foo.proto.x = 3; var foo1 = new foo(); alert(foo1.x);// 有值 foo.proto = { } foo1.x // 出现错误

MDN——javascript——入门——第三章对象——对象.构造函数.原型链.继承——知识点总结

对象Object 由属性property(变量).方法method(函数)组成 var objectName = { member1Name : member1Value, member2Name : member2Value, member3Name : member3Value } member(成员)的值是任意的, 一个如上所示的对象被称之为对象的字面量(literal)——手动的写出对象的内容来创建一个对象.不同于从类实例化一个对象,我们会在后面学习这种方式. 访问对象成员 1.点表示法

原型、原型链

原型和原型链的了解和掌握  在学习原型和原型链的时候有一点费劲,对我第一次学习来说有点绕.所以,今天来给大家说一下:  原型是什么: 原型是一个对象,其他对象可以通过它实现属性继承. 每一个对象都有一个属性叫prototype.   这个prototype的属性值是一个对象,默认的只有一个叫constructor的属性,指向这个函数本身.  原型方式:   该方式利用了对象的 prototype 属性,可以把它看成创建新对象所依赖的原型.  这里,首先用空构造函数来设置类名.然后所有的属性和方法

JS原型与原型链终极讲解

function Person () { this.name = 'John'; } var person = new Person(); Person.prototype.say = function() { console.log('Hello,' + this.name); }; person.say();//Hello,John 上述代码非常简单,Person原型对象定义了公共的say方法,虽然此举在构造实例之后出现,但因为原型方法在调用之前已经声明,因此之后的每个实例将都拥有该方法.从

面向对象、原型链、继承知识梳理

单例模式:就是一个对象咯 var person={ name:'xuwen', age:17 }; var person2={ name:'xiaoxu', age:25 } 工厂模式:就是一个函数,解决批量生产问题 1 function fn(name,age){ 2 var obj={}; 3 obj.name=name, 4 obj.age=age, 5 obj.write=function(){ 6 console.log(obj.name); 7 } 8 return obj; 9 }

内置对象和自定义对象的原型链

内置对象的原型链 新增属性 Object.prototype.mytest = function() { alert("123"); } var o = new Object(); o.mytest(); 重写属性 Object.prototype.toString = function() { alert("破话之王"); } o.toString();

JavaScript原型链

注意: 1. 参考:小角度看JS原型链. 2. f.prototype.constructor属性并不可靠.

面向对象原型链小结

构造函数: *)构造函数就是初始化对象的函数(给刚创建的对象赋值属性等). *)构造函数就是普通函数,内部的this指向window: 只有实例化对象后才被称为构造函数,内部的this指向实例. *)若构造函数内部存在返回值,且返回值的数据类型为值类型,那么调用这个函数时返回这个实例: 若构造函数内部返回值的数据类型为引用类型,那么调用这个函数时返回复杂数据. *)若构造函数在调用时没有传参,则构造函数的小括号可以省略. *)访问原型的方式:构造函数.prototype => 原型. *)Fun