理解javascript原型链

要理解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来向父对象传递参数
寄生式继承:封装了继承过程

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值