-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
/**
-
原型和原型链
-
参考王福朋博客
-
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
Labels
No labels