您的位置:首页 > Web前端 > JavaScript

【原生js】js面向对象三大特征之封装笔记

2015-06-12 14:19 591 查看
所谓封装,就是把抽象出的属性和对属性的操作写到类的定义中,称为封装。

js中实现封装主要有两种封装(公开,私有)

function Person(name,sal){
this.name=name; //公开
var sal=sal;//私有

this.showInfo=function(){ //公开
window.alert(this.name+” ”+sal);
}

showInfo2(){ //把函数私有化.
window.alert(“你好”+this.name+” ”+sal)
}
}


A.构造函数方式与原型方式给对象添加方法的区别

//通过构造函数方式给对象添加方法
function Dog(name){
this.name=name;
this.shout=function(){
window.alert("小狗尖叫"+this.name);
}
}
var dog1=new Dog("aa");
var dog2=new Dog("bb");
if(dog1.shout==dog2.shout){
window.alert("相等");
}else{
window.alert("不相等");
}

//会输出“不相等”


//通过原型方式给对象添加方法
function Dog(name){
this.name=name;
}
Dog.prototype.shout=function(){
window.alert("小狗尖叫"+this.name);
}
var dog1=new Dog("aa");
var dog2=new Dog("bb");
if(dog1.shout==dog2.shout){
window.alert("相等");
}else{
window.alert("不相等");
}

//会输出“相等”


说明通过构造函数来分配成员方法,给每个对象分配一份独立的代码。这样的弊端就是如果对象实例有很多,那函数的资源占用就会很大,而且有可能造成内存泄漏。而原型法是大家共享同一份代码,就不会有那种弊端。

1.通过原型法分配的函数是所有对象共享的;

2.通过原型法分配的属性是独立的;

3.如果希望所有的对象使用同一个函数,最好实用原型法添加方法,这样比较节省内存。

4.

function Person(){

}

// 创建对象
var p1=new Person();
p1.say();
// 这时用原型法分配
Person.prototype.say=function(){
window.alert("ok");
}

//这样执行会报错。p1.say()必须写到  prototype.say下方。
//说明 prototype方式是后置绑定


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: