Skip to content

原型和闭包 #2

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的方法。这就是所谓的“继承”。

七:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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