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

来源:互联网 发布:java获取私有属性 编辑:程序博客网 时间:2024/05/16 08:59

面向对象,设计模式相关概念:


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);



原创粉丝点击