您当前的位置:首页 > 互联网教程

js中什么是原型对象和原型链

发布时间:2025-05-20 21:02:03    发布人:远客网络

js中什么是原型对象和原型链

一、js中什么是原型对象和原型链

1、每个 JavaScript对象内部都有一个指向其它对象的“指针”或者“引用“,并通过这种方式在对象之间建立了一种联系,形成了一种链式结构,我的理解这就是所谓的原型链。

2、functionF(){}//F是一个函数,函数也是对象,而且每个函数都有一个属性叫:"prototype"

3、varo=newF();//F.prototype就是o的原型对象

4、//上面这个例子是想说明:通过new在对象o与对象F.prototype之间建立了联系,这个建立联系

5、//的方式有人叫"原型继承"。当访问的对象属性不存在时,就会沿着原型链去查找。

二、javascript 原型,原型链是什么有什么特点

原型是JS的一个引用对象,就是说prototype本身就是一个对象,和OBJECT没什么不同

所有的属性中都会包含一个属性__proto__来指向你的原型对象

//object对象是默认指向OBJECT直到你指定一个proto指针

//这里由于child本身是已经实例化的OBJECT,所以会复制一份指定的root的prototype指针引用到child

varchild={__proto__:ROOT.prototype}

//这里是child1原__proto__是指向空的object

//这里对child1的prototype指针进行了替换

child1.prototype=ROOT.prototype

//你会发现除了child无法实例化,其他的特性都继承了

console.log(child.constructor)

console.log(child.__proto__)

所以这里面

__proto__是指向的创建者的原型对象

实例化的对象会先从实例化对象里查找属性,如果找不到会在__proto__里面查找指向的prototype的属性

三、js原型链和继承的理解

Object() Function() Array()等等都为构造函数。

Js面向对象与传统oop有些不同,语法较高级语法糖封装。

This为指针。指向this作用域的调用者

1.原型继承链顶端为Object。Js函数是对象

2.当读取对象中的属性时,先去实例本身中搜索,如搜索不到则去指向的原型中搜索

1.原型的存在意义在于实现继承共享,是在构造函数中定义的一个成员对象,在下次实例化时不需要在构造函数中定义成员就可实现实例共享方法属性。

例子:通常为。构造函数.prototype.xxx=我想实现实例继承的东西-》 new构造函数-》新实例a对象.原型指针指向构造函数的xxx对象(引用类型)

例子:Array不等于 Array()原因 Array为一个函数,而Array()为一个构造函数调用语句,故Array拥有prototype对象用于实例的共享继承,Array()产生一个实例故只能拥有prototype对象的私有指针 proto

2.在使用原型继承时不能使用字面量构造函数.prototype={}的方式重写原型对象。因为会导致该原型对象的constructor属性被重写,在生成的实例中导致constructor指向Object并且会切断之前原型对象的联系,破坏原型链。

3.JavaScript主要通过原型链实现继承。原型链的构建是通过将一个类型的实例赋值给另一个构造函数的原型实现的

xxx实例. proto-》function xxx()构造函数.prototype对象故xxx. proto=== xxx.prototype

xxx.prototype. proto-》Object.prototype因为所有对象都为Object函数构造来的。故xxx.prototype. proto===Object.prototype。

Object.prototype. proto为原型链顶端 proto定义了尚未使用所以为null故Object.prototype. proto===null约定俗成。

instanceof用来判断某实例是否为某构造函数的实例

isPrototypeOf用于判断某实例是否拥有某构造函数的原型对象指针

1.原型模式有忽略构造函数定义初始值步骤及原型中操作引用类型的缺点。

所以需要组合使用构造函数模式+原型模式来创建实例。在构造函数中定义实例的属性,而需共享的方法就定义在原型对象中。

继承:在子构造函数中调用父.call(this, name);实现构造函数之间的属性继承。使用子.prototype= new父();子.prototype.constructor=子;实现方法的继承。

2.如要在生产环境下的构造函数新增方法(如Array)需要使用一个类似于工厂函数的寄生构造函数模式在构造函数中返回一个修改后的对象