Skip to content

原型和闭包 #2

@iSAM2016

Description

@iSAM2016

/**

  • 原型和原型链

  • 参考王福朋博客

  • http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B/
    */
    一: 略
    二: 函数和对象的关系

    函数是对象的一种,对象都是函数创建的。eg:

    function Employee(name,job,born)
    {
    this.name=name;
    this.job=job;
    this.born=born;
    }
    
    var bill=new Employee("Bill Gates","Engineer",1985);
    

三:prototype 原型
原型和函数的关系已经在开篇已经交代了

四:proto 隐式原型
每个对象都有一个隐式的属性,但是有些浏览器是不会让你发现的

文字版:  每个对象都有一个__proto__属性,指向创建该对象的函数的prototype。

eg: bill.__proto__ === Employee.protitype  //true

eg: var obj={}

    obj.__proto__ === Object.prototype  //true
    Object.prototype.__proto__ === null //true

最终的__proto__ 都要指向 Object.prototype(考虑Object.prototype.__proto__)

函数是特殊的对象,他当然也是有__proto__
Object.__proto__ === Functon.prototype

五: instanceof 运算
Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。
运算规则:沿着A的__proto__ 这条线来找,同时沿着B 的prototype 这条线来找,如果两条线能同
时找到同一个对象,那么就返回true,如果找到终点还没有找到,则返回false
console.log(Object instanceof Function) //true
console.log(Function instanceof Object) //true
console.log(Function instanceof Function) //true
console.log(Object instanceof Object) //true

instanceof表示的就是一种继承关系,或者原型链的结构。

六: 继承
javescript中的继承是通过原型链来体现的:
访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

 由于所有的对象的原型链都会找到Object.prototype,因此所有的对象都会有Object.prototype的方法。这就是所谓的“继承”。

七:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions