理解javascript原型链

来源:互联网 发布:广东人吃福建人 知乎 编辑:程序博客网 时间:2024/06/05 05:11

要理解javascript的原型链首先要明白javascript创建对象的方式
1、对象有数据属性和访问器属性,可以使用defineProperty来创建
数据属性具有四个特性:
Configurable:能够通过delete属性删除而重新定义属性,默认true
Enumerable:能够通过for in循环属性。默认true
Writable:能够修改
Value:包含的数据值
访问器属性有四个特性:
Configurable
Enumerable
Getter:读取属性,默认undefined
Setter:设置属性,默认undefined
2、创建对象
1)字面量

var s={}

2)Object构造函数

var obj=new Object();

3)工厂模式

function creatObj(){    var o=new Object();    o.name='hello';    o.sayHello=function(){        console.log("Hello World");    }    ......    return o;}工厂模式的弊端在于我创建了什么对象我并不知道,我只知道我创建了对象

4)构造函数模式

function Person(){    this.name='hello';    this.phone='12345';    this.sayHello=function(){        console.log('Hello World');    }}构造函数的弊端:方法没能够复用,会创建两次sayHello

5)原型模式

function Person(){}Person.prototype={    name:'hello';    phone:'12345';    sayHello:function(){        console.log(this.name);    }}原型模式的弊端:所有的属性都共享了

6)构造函数和原型组合

function Person(){    this.name='hello';    this.phone='12345';}Person.prototype={    sayHello:function(){        console.log(this.name);    }}通过构造函数共享属性,原型共享方法

3、有了对象,自然就存在对象之间的继承(OOP的必然)
目的是什么?

1、复用父对象的方法2、子对象的属性和父对象无关联,子对象修改不会影响其他子对象

要实现这个最好的方法就是:Object.create,而其他的组合式继承、寄生式继承都会存在很多问题。
首先讲一个最主要的概念:
prototype:指向父对象的共享方法或者属性
特点:实例中访问不到,如要访问就要用proto(本身指向prototype),原型对象中可以访问
组合式继承:通过call来向父对象传递参数
寄生式继承:封装了继承过程

原创粉丝点击