JavaScript之原型模式


javascript是一种基于原型的,同时又是面向对象的语言,但是它并不存在类的概念,所谓的对象也并非从类中创建出来的,所有的javascript对象应该都是从某个对象上复制出来的。也就是javascript中所说的原型。


原型编程范型至少包括以下基本规则:

1.所有的数据都是对象

2.对象不是通过实例化类而是找到一个对象作为原型并复制它。

3.当某个对象无法响应某个请求时,会把该请求委托给自己的原型。

4.对象会记住它的原型


JavaScript原型模式

javascript的原型继承在ECMA5中才正式提出来,ECMA5提供了clone方法用来克隆对象。

var Person = {
    name : 'zll',
    age : 20
};
var a = Object.create( Person );
console.log(a.name);  //输出zll
除此之外也可以运用prototype来实现。


JavaScript中的原型继承

 javascript定义了两种类型机制:基本数据类型和复杂数据类型。

基本数据类型有:undefined,number,boolean,string,null。

复杂数据类型就是Object

除了undefined以外,都应该是对象。依据原型概念,所有的对象都应该有一个根对象,javascript中定义Object.prototype对象为根对象。可以用ECMA5中提供的Object.getPrototypeOf()来查看对象的原型。我们显示的调用var obj1 = new Object()或者var obj2 = {}时,引擎会从Object.prototype上克隆一个对象出来。所以我们最终得到的对象是具有根对象为原型的。

用new运算符从构造器中克隆一个对象:

function Person( name ){

    this.name = name;

};

Person.prototype.getName = function(){
    return this.name;
};
var a = new Person( 'zll' );
这里的Person不是一个类,而是函数构造器。javascript中的函数既可以作为普通函数被调用也可以作为构造器被调用。当使用new运算符来调用函数的时候,此时就作为构造器来使用。

上述的3,4点其实可以算在一起。javascript的原型链查找机制的前提是每个对象必须知道它的原型。

因此javascript给对象提供了一个_proto_的隐藏属性。默认会指向它的构造器的原型对象。

var a = new Object();
console.log( a._proto_ === Object.prototype );   //输出true

javascript对象最初都是由Object.prototype克隆来的,但对象构造器的原型不仅限于此,比如我们最常用的原型继承:

var obj = { name : 'zll' };
var A = function(){};
A.prototype = obj;
var a =new A();
console.log( a.name );  //输出  zll

//一个类继承另一个类
var B = function(){};
B.prototype = new A();
var b = new B();
console.log( b.name ); 

这是我的学习总结。以后应该会继续完善。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值