标签:__ 函数 对象 JavaScript 高级 Js 原型 prototype 属性
<!--
****函数原型****
1函数的prototype属性
每个函数都有一个prototype属性 默认指向一个空object空对象 (原型对象)
原型对象中有一个属性constructor 指向函数对象
2给原型对象 添加属性(一般是方法)
函数的所有实例对象自动拥有所有原型中的属性(方法)
****显式原型 隐式原型****
每个函数function都有一个prototype即显式原型
每个对象都有一个__proto__即隐式原型
*对象的隐式原型值为其构造函数的显式原型的值
程序员能直接操作显式原型 不能直接操作隐式原型(ES6之前)
****原型链****
访问一个对象的属性时 先在自身属性查找 找到返回
如果没有再沿着__proto__这条链向上查找 找到返回
如果最终没找到,到尽头Object的__proto__ 返回undefined
隐式原型链
查找对象的属性
所有函数的__proto__都是一样的 都是new Function
函数的显式原型对象指向对象 默认空的Object实例对象
但Object不满足
所有函数都是Function的实例 包含Function
Object的原型对象是原型链的尽头,为null
****原型链_属性问题****
读取对象的属性值时,自动到原型链中查找
设置对象的属性子时,不会查找原型链 如果当前对象没有此属性 直接添加该属性和值
方法一般定义在原型中 属性一般通过构造函数定义在对象本身上
****变量提升与函数提升****
变量提升
通过var定义 定义语句之前就可以访问到值undefined
函数声明提升
通过function 声明的函数 在之前就可以调用值函数定义(对象)
****定义上下文****
-->
console.log(Date.prototype.constructor === Date ,typeof Date.prototype)
function Fun() {
}
//给原型对象添加属性 一般是方法 ==》实例对象可以访问
Fun.prototype.test = function(){
console.log('test')
}
console.log(Fun.prototype)
var fun = new Fun()
fun.test()
// ***************
function f() {
//内部语句 this.prototype = {}
}
console.log(f.prototype)
var fn = new f()
console.log(fn.__proto__)
console.log(f.prototype === fn.__proto__)
// 定义构造函数 创建实例对象 给原型添加方法 通过实例调用原型方法
标签:__,函数,对象,JavaScript,高级,Js,原型,prototype,属性 来源: https://blog.csdn.net/weixin_54372875/article/details/122514195
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。