javascript之对象学习笔记(二)--对象原型,继承

38 篇文章 0 订阅

这里使用rectangle()函数作为例子

1.简单函数

 function rectangle(w,h){

this.width = w;

this.height = h;     

   }

var test = new rectangle(1,2);创建简单rectangle对象,包含width,height属性

额外定义一个计算面积的函数将test对象以参数形式传入

function getRecArea(rec){ 

return rec.width * rec.height;  

}

console.log( getRecArea(test) );

此时就可以简单计算任意简单矩形面积,但上述不符合面向对象编程设计思想,应该将方法也包含进 " 类 "

function rectangle(w,h){

this.width = w;

this.height = h;    

this.area = function (){return this.width * this.height} 

 }

console.log( test.area())

此时已经是一个很友好的解决方案,但还不是最优化的,每创建一个rectanlge对象的时候变的只是width和height参数,而里面arec函数在每个rectanlge对象里面都一样,这让我想到java里面的继承机制,java里面继承自基类,javascript里面每个对象又有prototype对象属性(其实在创建对象后就默认初始化了该对象的prototype属性值,prototype初始化是一个对象并包含一个constructor属性,这也是每个对象为什么都有constructor的原因), 添加自prototype里的函数或属性都会成为被初始化对象的属性

 function rectangle(w,h){

this.width = w;

this.height = h;

}

rectangle.prototype.arec = function () { return this.width* this .height;} //总结:将不变的属性放在prototype里面是很好的解决方案


2.拓展内建类型

  不仅用户自定义的函数有prototype,javascript内建的String ,Date等内建类 也有prototype属性;

  实例:判断字符串是否以指定字符结尾

 String.prototype.isEndWith = function(c){

return (c == this.charAt(this.length-1))

 }

var s = " STRINGc";

console.log(s.isEend());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值