原型链详解记录

javascript中,一切都是对象, 函数也是对象,也有自己的属性和方法,prototype就是每个函数都有的一个属性,这个属性就是一个对象(对象是属性的集合),默认只有一个constructor属性,指向函数本身。例如SuperType函数:(右侧是该函数的原型)和Object函数(原型可以自定义自己的属性)

接下来看代码:

function Example() {      
  Example.prototype.name = 'maomao';
  Example.prototype.getAge = function() {
    return 18;
  }  
}

var ex = new Example();
console.log(ex.name);
console.log(ex.getAge());

可以看出来,Example是一个函数,ex对象是从这个函数中new出来的,这样ex对象就可以调用Example.prototype中的属性

ex.__proto__ === Example.prototype (每个对象都有一个隐藏属性__proto__,指向创建这个对象的函数的prototype,称隐式原型)

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

function Foo() {}
var f1 = new Foo();

f1.a = 10;
Foo.prototype.a = 100;
Foo.prototype.b = 200;

console.log(f1.a) //10
console.log(f1.b) //200

访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。

hasOwnProperty区分一个属性到底是基本的还是从原型中找到的,从Object.prototype中来

参考:https://www.cnblogs.com/wangfupeng1988/p/4001284.html

个人认为这篇文章写的非常清晰,基本js的基础知识非常透彻的讲解的很清楚,文章对参考文章做了一个总结作为日常积累,很多内容引用了原文

猜你喜欢

转载自www.cnblogs.com/wuhuaguo/p/9934180.html