JavaScript之原型和原型链

典型的面向对象编程语言(比如C++和Java),存在“类”(class)这个概念。所谓“类”就是对象的模板,对象就是“类”的实例。但是,JavaScript语言的对象体系,不是基于“类”的,而是基于构造函数(constructor)和原型链(prototype)。

一 原型和类的区别:

  1. 大多数编程语言中使用new关键字构建对象
JavaScript之原型和原型链_第1张图片
类构造对象
  1. 原型构造对象是具体到具体
JavaScript之原型和原型链_第2张图片
原型构造对象

二 设置原型

  1. obeject.create


    JavaScript之原型和原型链_第3张图片
    obeject.create

    JavaScript之原型和原型链_第4张图片
    实例
  2. 构造函数,使用new关键字创建对象
    JavaScript之原型和原型链_第5张图片
    构造函数

    JavaScript之原型和原型链_第6张图片
    实例

    用create的方法构造出来的对象,name属性和start方法都是在对象的原型上,也就是说我们可以通过更改landRover的属性动态改变landWind的原型上的方法和属性,而上面通过new关键字用构造函数生成的实例,car属性是无法改变的。

三 _proto和prototype的区别

function F() {} 
//F是构造函数,有一个属性prototype,指向原型对象(其实任何一个函数创建后都会有prototype属性)
var f = new F();
//f是由F创建的实例,内部有一个[[Prototype]]指针,指向前面构造函数的原型对象
//但是这个内部的指针不可访问,所以越来越多的引擎支持一个特殊的属性__proto__来访问
//也就是说实例的__proto__属性和它的构造函数的prototype属性指向相同
console.log(F.prototype, f.__proto__);  
//chrome下输出Object Object(不同浏览器可能输出形式不同),的确可以访问
console.log(F.prototype === f.__proto__); //true,二者的确指向同一个对象

你可能感兴趣的:(JavaScript之原型和原型链)