javascript之对象学习笔记(二)--对象原型,继承
2011-10-15 09:40
966 查看
这里使用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());
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());
相关文章推荐
- js学习笔记——理解javascript的对象与继承
- JavaScript 对象 之继承对象 学习笔记
- 【转载】Javascript原型继承-学习笔记
- JavaScript 学习笔记 - 对象和继承
- Javascript学习笔记1 理解对象 属性 原型对象
- javascript学习笔记(十) js对象 继承
- Javascript学习笔记(Object 对象与继承)
- 【学习笔记】JavaScript中,构造函数、原型对象和实例的关系
- Javascript 学习笔记之 对象篇(二) : 原型对象
- JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)
- 韩顺平 javascript教学视频_学习笔记12_js面向对象编程介绍_类(原型对象)和对象
- 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承
- 【Javascript学习笔记】由JavaScript中call()方法引发的对面向对象继承机制call的思考
- JavaScript学习笔记之原型对象
- web前端学习(二) javascript对象和原型继承
- JavaScript学习笔记之对象及继承
- JavaScript学习笔记之四 对象 及原型