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

JS学习笔记——面向对象,设计模式

2013-05-17 14:53 603 查看
面向对象,设计模式相关概念:

JS中,只有函数具有作用域。定义在一个函数中的变量,在该函数内嵌的函数是可以访问的。
函数是运行在定义他们的作用域中,而不是运行在调用他们的作用域中。

定义类的三种基本模式
1.门户大开型,全部是共有的
2.下划线变量模式,从编程规范上区分了私有变量
3.采用闭包实现真正的私有属性和方法(缺点:每个实例都有一份属性和方法的拷贝,浪费内存,而且不利于继承)

function Book(name) {
//定义私有的内部属性
var n;
// 定义公有的访问接口
this.getName = function () {
return n;
}
this.setName = function (newName) {
if (checkName(newName)) {
n = newName;
} else {
throw new Error("name format error");
}
}
//定义私有方法
function checkName(checkname) {
if (checkname.length > 10) {
return false;
}
return true;
}
//初始化内部属性
this.setName(name);
}
//所有实例都共享的方法
Book.prototype.display = function () {
alert("display:" + this.getName());
}
var b = new Book("wangjue");
alert(b.getName());
b.setName("fengfei");
alert(b.getName());

b.display();


继承的实现

// 类的继承
//定义父类
function SuperType(name1, sex1) {
this.name = name1;
this.sex = sex1;
}
SuperType.prototype.getName = function () {
return this.name;
}
//定义子类
function SubType(name1,sex1,age1) {
SuperType.call(this, name1, sex1);//调用父类的构造函数
this.age = age1;//子类新增的属性
}
//将子类继承到父类
SubType.prototype = new SuperType();
SubType.prototype.constructor = SubType;//修改子类的构造器名称(构造函数)
//拓展子类的方法,一定要放在继承的两行代码之后!!
SubType.prototype.getAge=function(){
return this.age;
}

var s = new SubType("wang", "manle", 12);
alert(s.getName() + s.getAge());
alert(SubType.prototype.constructor);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: