原型与原型链
来源:互联网 发布:国际网络推广工程师 编辑:程序博客网 时间:2024/04/27 13:40
原型有两种:
1为显示原型,2为隐式原型
1. 显示原型
a) Prototype
b) 每个函数都有一个显示原型prototype当然函数也有隐式原型
c) 原型就是函数的一个属性,这个属性名叫做prototype
d) 这个属性即prototype的类型是object
2. 隐式原型
a) __proto__
b) 每个对象都有一个隐式原型,并且没有显示原型,函数这个一等公民除外.
c) __proto__也是函数的一个属性
d) 类型仍然是object
一个特殊的存在函数对象:既是对象又是函数,所以他又有prototype又有__proyo__
什么是函数对象
就是这样的 var f = new Function;他console.dir的时候他两个都存在
而 var ff = new String; 他console.dir的时候只存在__proto__
懵逼了,函数真TM 是一等公民. 变量. 对象, 函数
函数是既有prototype又有__proto__的
显示原型与隐式原型的关系,个人理解:把构造器当老子,他们创建的对象就是儿子.每个老子的显示原型等于他们的每个儿子的隐式原型.就是老子的显性基因,都传给儿子了,变成儿子的隐式基因,并且是完全相等的.而且,这些儿子很坑爹,他们的其中一个添加了什么基因,他们老子也会被添加上,而老子添加上了,所有的儿子也都会被添加上,
当然,如果你想控制,让某个儿子的东西不影响家里其他人.你可以动他的自有属性,计算机在查找这个属性时,会优先查找自有属性,自有找不到才会查找原型属性
计算机在对象中找属性的具体方法是:
1. 找自有属性.找到返回.
2. 找不到.找隐式原型.找到返回
3. 找不到,找隐式原型的隐式原型,找到返回,找不到,则继续找隐式的隐式的隐式
4. 整个过程就是obj.__proto__.__proto__ 这个过程中,只要找到就不往下找了,然后返回值,最上级,就是到顶的一个是null
5. 如果都没有找到,返回undefined
当然.我们在平时使用的时候,__proto__是可以省略的,所以他叫隐式原型
应用:
比如说,我们创建了一个动物类.可以添加一些属性到显示原型中.这样我们创建对象的时候,所有的对象都有了这个属性.
再比如,数组,除了系统自己定义的属性外,我们绝对还不够,我们希望有一个属性,可以让数组中重复的数字删除.我们就可以给Array这个构造器的prototype显示原型添加一个属性.这样以后不管你什么时候创建了一个数组,只有你new Array 你就可以使用这个属性,- 原型与原型链
- 原型与原型链
- 原型与原型链
- 原型与原型链
- 原型与原型链
- 原型与原型链
- 原型与原型链
- 原型与原型链
- javascript原型与原型链
- JS 原型与原型链
- JavaScript原型与原型链
- 原型对象与原型链
- js原型与原型链
- JS原型与原型链
- js---原型与原型链
- jS原型与原型链
- 原型对象与原型链
- 原型对象与原型链
- C语言基础-指针和数组的关系17
- slice和splice的区别
- dancing links(待补。。。。。)
- Android Studio导入项目问题
- 线性判别分析(Linear Discriminant Analysis)(二)
- 原型与原型链
- java getSource()和 getActionCommand()区别
- 面试android开发工程师小结
- TensorFlow学习笔记(一):基本概念
- 游戏寻路之A*寻路
- Webpack基础之入口起点
- android targetSdkVersion的作用
- Day 3 CNN进阶之旅
- 算法设计作业14