Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

原型和闭包 #2

Open
iSAM2016 opened this issue Nov 21, 2016 · 0 comments
Open

原型和闭包 #2

iSAM2016 opened this issue Nov 21, 2016 · 0 comments

Comments

@iSAM2016
Copy link
Owner

/**

  • 原型和原型链

  • 参考王福朋博客

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

七:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant