javascript 基础: 封装对象的属性 方法 javascript
发布时间:2018-12-31 21:45:03 作者:本站编辑 来源:本站原创 浏览次数:
www.javainfo.com.cn 上干货 欢迎收藏
如有疑问 请留言 欢迎提供建议
js脚本语言的对象封装
1 以函数的形式封装对象
//javascript属性的访问方法
var tv = {};
tv.color="red";
tv.play=function(){
return "hello";
}
for(var i in tv ){ // 可以按照顺序访问对象的属性和方法
alert(tv[i]);
}
2 函数内包 及函数工厂模式
var tvv = function(){ //无参数模式
var tv = {};
tv.color="red";
tv.play=function(){
return "hello";
}
return tv;
}
var tvv1 = new tvv(); //对象实例化
alert(tvv1.color); //属性调用为 “.” 运算符
var tvv = function(color){ //有参数模式
var tv = {};
tv.color=color;
tv.play=function(){
return "hello";
}
return tv;
}
var tvv1 = new tvv("blue");
alert(tvv1.color);
//构造方法的形式
function tvvv(color,size){
this.color = color;
this.size = size;
this.play = function(){
return "fly";
}
}
var tvvv1 = new tvvv("red","444");
alert(tvvv1.size);
3 prototype方法给对象附加共享代码函数块的方式 创立对象, 好处 共享内存 节约内存
function tiger(color,play){
this.color = color;
this.play = play;
}
//共享代码段, 不能区分不同对象,所有的对象都会维护这一段代码,及这段代码是所有对象共有的, 当实例化多个对象的时候,
//其中一个对象修改了这个函数的返回值,其余对象的这个函数也会返回同样的值。
//给tiger对象附加函数 fly
tiger.prototype.fly=function(){
alert("tiger flay");
}
var tiger1 = new tiger("huangse","jjj");
var tigger2 = new tiger("lvse","fsdfsfd");
//alert(tiger1.color);
tiger1.fly(); //tiger flay
//修改 共享代码段 ,无区别对待所有的实例化对象
tiger.prototype.fly=function(){
alert("jump");
}
tigger2.fly(); //jump
tiger1.fly(); //jump
//经过上面的演示 可以放心 当tiger的fly方法声明发生变化后,再次调用的tiger1.fly() 方法
//返回了最新的值 jump 而不是 tiger flay
*/
4 混合方式 对象的最优处理方法
//对于可以共享的属性或方法 可以放在共享代码段里 , 对于不能共享的属性或方法,我们需要为其声明为对象的私有
//属性或方法 这样可以避免属性或方法 在不同对象之间的相互影响。
function tiger(color,play){
this.color = color; //属性
this.play = function(){ //私有的方法 是无须共享的
alert("jump" + play);
}
}
tiger.prototype.drink=function(){
alert("drink warter ");
}
var t1 = new tiger("lvse","t1");
var t2 = new tiger("huangse","t2");
alert(t1.color); //lvse
alert(t2.color); //huangse
t1.play(); //jumpt1
t2.play(); //jumpt2
//T2 的私有方法修改了 不会影响T1的方法
t2.play = function(){
alert("t2 change play ");
}
t2.play(); //t2 change play
t1.play(); //jumpt1
//共享属性是 内存共享的 结果是一样的
t1.drink(); //drink warter
t2.drink(); //drink warter
经过介绍 我们可以发现 最好的方式就是 采用混合方式, 这样可以根据实际需要设计需要的类 ,还可以避免属性或方法对不同实例的影响。
如有疑问 请留言 欢迎提供建议











评论已有 0 条