一、原型和原型链
1.原型(prototype):原型是函数特有的,是为了继承
<script>
function fn(){ }
fn.prototype.name='小明'
fn.prototype.fn2=function(){
console.log('111')
}
</script>
2.原型链(-proto-)prototype:所有的都有原型链(原型链没有原型)
<script>
let obj={}
console.log(obj)
let fn=function fn(){ }
console.dir(fn)
</script>
dir的理解:
<--闭包(CLosure)的形成:必须是,函数中生命另外一个函数 -->
<script>
function() {
var a = 10;
// 声明另外一个函数
(function b() {
console.log(a);
console.dir(b);
// b的scopes属性中存储了b函数生命是所在的作用域们(祖先们))
// 匿名函数作用域 被保存在b的scopes中,成为b的闭包
// 本质上 闭包就是函数作用域,只是因为被b存储了,所以称为闭包 }
})()
</script>
3.原型的查找规则:
<script>
function Person(){ //不是构造方法 }
Person.prototype.name='小明'
Person.prototype.age=18
Person.prototupe.getAge=function(){
console.log(this.age)
}
let Person1=new Person() //构造方法
console.log(Person1.name)
Person1.getAge()//函数调用
</script>
- 当前实例属性查找,找到了返回值,否则顺着原型链一层层往上找
- 直到找到null为止,没找到null就会报错