js原型链
JS 原型
2023-06-13 09:12:15 时间
显示原型
1.每一个构造函数都有一个prototype属性,默认指向一个空Object对象(原型对象)
function fun(){
}
console.log(fun.prototype ) //{constructor: ƒ}
3.可以向原型对象添加一些方法
function fun(){}
fun.prototype.test = function(){console.log('test')}
4.每一个原型对象中有一个属性constructor,它指向构造函数
function fun (){
}
console.log(fun.prototype.constructor === fun) //true
5.构造函数与它的原型对象有一个相互引用的关系
6.原型对象上添加的方法用于实例对象上使用
隐式原型
每一个实例对象都有一个__proto__属性,称之为隐式原型 对象的隐式原型的值为其对应构造函数的显示原型的值
function Fn(){}
var fn = new Fn()
console.log(Fn.prototype === fn.__proto__) // true
function Fn(){}
console.log(Fn.prototype)
var fn = new Fn()
console.log(fn.__proto__)
console.log(Fn.prototype === fn.__proto__)
Fn.prototype.test = function(){
console.log('test')
}
fn.test()
原型链
对象属性的查找规则 原型链本质上是从隐式原型链
function Fn(){
this.test1 = function(){
console.log('调用了test1()')
}
}
Fn.prototype.test2 = function (){
console.log('调用了test2()')
}
var fn = new Fn()
//
fn.test1() // 调用了test1()
fn.test2() //调用了test2()
console.log(fn.toString()) //[object Object]
fn.test3() //Uncaught TypeError: fn.test3 is not a function
代码简易的内存结构如下
当执行 fn.test1()时先对象自身查找发现有,直接调用test1()
当执行fn.test2()时,自身对象上没有test2,接下来看构造函数的原型对象上是否有test2,发现有直接调用test2
当执行fn.toString(),时,自身对象没有,接下来查找它构造函数的原型对象上是否有toString(),发现没有,接下来又继续沿着Fn原型对象的构造函数的原型对象上查找找到toString()
当执行fn.test3()时,查找自身对象没有,它直接的构造函数对象的原型对象上也没有,接下来沿着Fn原型对象的构造函数的原型对象的构造函数的原型对象上查找,这里已经找到原型链的尽头,Object原型对象的proto指向null,
因此fn.test3()抛出异常
相关文章
- 【说站】js原型链继承的关系
- 【说站】js原型链默认的原型
- 【说站】js原型模式是什么
- 【说站】js原型链继承的优点
- Node.js笔记
- Js原型链与类
- get两个js小技能——JS截取视频第一帧&图片转Base64
- 【源码】PDF.js批注注释插件库(纯JS). 创建和保存PDF批注(PDF 高亮/签名/插图/截屏/文本框/画笔/多边形)-pdf.js
- js实现md5加密详解编程语言
- JS定时器:setTimeout()和setInterval()方法
- 快速掌握JS操作MySQL数据库技巧(js操作mysql数据库)
- 从 Node.js 分裂出 Io.js 事件看开源软件谁做主
- JavaScript轻松连接Oracle数据库,轻松搞定数据操作。(js连接oracle数据库)
- 从前端JS里请求Redis资源,搭建高性能应用(前端js请求redis)
- Redis中的订阅机制及其在JS中的应用(redis 订阅 js)
- 前端开发必须知道的JS之原型和继承
- JS函数验证总结(方便js客户端输入验证)
- js中用事实证明cssText性能高的问题
- 这段js代码得节约你多少时间
- js延迟加载改变JS的位置加快网页加载速度
- .NET中利用js让子窗体向父页面传值的实现方法
- 一个简单的JS时间控件示例代码(JS时分秒时间控件)
- js实现的折叠导航示例
- javascript教程之不完整的继承(js原型链)
- js修改原型的属性使用介绍
- 原生js实现淘宝首页点击按钮缓慢回到顶部效果
- js中的如何定位固定层的位置
- js实例属性和原型属性示例详解
- js实现的点击div区域外隐藏div区域
- Node.js编码规范
- Express.JS使用详解
- jquery库文件略庞大用纯js替换jquery的方法