Javascript设计模式系列二

  创建对象的基本模式,一、门户大开型,二、采用下划线来表示属性和方法的私用性,三、使用闭包来创建私用的成员。

  一、门户大开型。只能提供公用成员。所有属性和方法都公开的、可访问的。这些共用属性都要使用this关键字来创建。

  <script type="text/javascript">

        ////定义Dog对象
        var Dog = function (name, age) {
            this.name = name;
            this.age = age;
        }

        Dog.prototype.SayHello = function () {
            ///弹出消息
            alert(this.name+this.age)
        }

        ////实例化对象
        var dog = new Dog("Auto", 3)
        ////打招呼
        dog.SayHello();

    </script>

  二,采用下划线来表示属性和方法的私用性。

 <script type="text/javascript">

        ////定义Dog对象
        var Dog = function (name, age) {
            this.setName(name);
            this.setAge(age);
        }

        Dog.prototype = {
            setName: function (name) {
                this._name= name;
             },
             getName:function(){
             return this._name;
             },
             setAge:function(age){
                this._age=age;
             },
             getAge:function(){
             return this._age;
             },
             SayHello:function () {
                ///弹出消息
                alert(this._name+this._age)
             }
        }

        ////实例化对象
        var dog = new Dog("Auto", 3)
        ////打招呼
        dog.SayHello();
        dog.setName("cc")
        alert(dog.getName())
        alert(dog.getAge())
    </script>

  三、使用闭包来创建私用的成员。在Javascript中,函数具有作用域,也就是说, 在一个函数内部声明的变量在函数外部是无法访问的。定义一个函数中的变量在该函数的内嵌函数中是可以访问的。

 <script type="text/javascript">

        ////定义Dog对象
        var Dog = function (name, age) {
            var name, age;
            this.setName = function (name) {
                name = name;
            };
            this.setAge = function (age) {
                age = age;
            };
            this.getName = function () {
                return name;
            };
            this.getAge = function () {
                return age;
            };
        };

        ////实例化对象
        var dog = new Dog("Auto", 3)
        alert(dog.getName())
        alert(dog.getAge())

    </script>

  本文源于:Javascript设计模式。

时间: 2024-10-25 14:05:31

Javascript设计模式系列二的相关文章

javascript设计模式系列二-封装

JavaScript封装: var Book = function (id, name, price) { this.id = id, this.name = name, this.price = price } Book.prototype.display = function () { //展示书本 } var book = new Book(10, 'js', 30); book.display(); console.log(book.name); 问题:通过this和prototype添

设计模式系列二(策略者模式)

浑浑噩噩的过的漫无目的,更多的是迷茫,真不知该如何定位自己的人生?空有远大抱负,而又力不从心!有句话说的好,当你的才能撑不起你的野心的时候,就该静下来心来好好学习了!于是闲来无事,便继续开始我的设计模式之游!今天便研究下策略者模式! 1.策略者模式解析 大话设计模式是这样讲道: 策略者模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法减少各种算法类与使用算法类之间的耦合[DPE]. 个人理解:所谓一系列算法方法就是一系列

Javascript设计模式系列三

继承,一个类或对象继承另一个类或对象的三种方法.类式继承.原型式继承.掺元类. 一.类式继承,原型链.Extend函数. <script type="text/javascript"> ////定义Person类 var Person = function (name) { this.name = name; }; Person.prototype.getName = function () { return this.name; }; ////原型链 function A

JavaScript 闭包系列二 --- 匿名函数及函数的闭包

一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) {    return 2*x;} 2)Function构造函数,把参数列表和函数体都作为字符串,不方便,不建议使用 var double = new Function('x', 'return 2*x;'); 3)函数表达式方式 var double = function(x) {    return 2*x;} 该形式中,等号右边是一个匿名函数,创建函数完毕后,将该函数赋给了变量doubl

Javascript设计模式系列一

定义类,方法赋值给prototype属性各种写法: 方法一: 1 <script type="text/javascript"> 2 ////定义Message类 3 var Message = function () { 4 } 5 ////添加方法 6 Message.prototype = { 7 Display: function (msg) { 8 ///弹出 9 alert(msg); 10 } 11 }; 12 13 ////实例化 14 var msg =

javascript 设计模式(二)

(function(){ //在js中我们利用function来定义类 function Shape(){ //在类的内部使用var声明的为私有变量 var x = 1; var y = 1; }; //利用new关键字进行类的实例化 var oShape = new Shape(); console.log(oShape.x);//undefined,类的实例化对象中不能访问到私有变量 //如何在类中定义公有变量 function Parent(){ this.x = 1; this.y =

设计模式系列(二)-抽象工厂

[注]本文还有待修改,现在只提供源码 和 简单分析,后续会做详细说明 1.为什么要使用抽象工厂,一个案例告诉你,对照下面这张图,来看案例 问题: 1.UI展示有时候,需要调用业务A,有时候要调用业务B 2.而业务A,可能使用了MSSQL数据库,也有可能使用了Oracle数据库 3.不管MSSQL数据层,还是Oracle数据层,他们用到的实体都是一样,且数据库需要的方法也类似 分析并解决 1.首先,我们肯定需要一个数据层,那么这个数据层由谁来创建,由谁来调用 [数据层由数据工厂创建 并 赋值给数据

设计模式系列二结构型之(装饰者模式)

1.装饰者模式简介 意图: 动态地给一个对象添加一些额外的职责. 适用性: 在不影响其他对象的情况下,以动态.透明的方式给单个对象添加职责. 处理那些可以撤消的职责. 当不能采用生成子类的方法进行扩充时.一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长.另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类. 2.生活实例 3.装饰者模式结构 4.示意代码 // "Component" abstract class Component {

常用的JavaScript设计模式(二)Factory(工厂)模式

Factory通过提供一个通用的接口来创建对象,同时,我们还可以指定我们想要创建的对象实例的类型. 假设现在有一个汽车工厂VehicleFactory,支持创建Car和Truck类型的对象实例,现在需要通过这个工厂创建指定类型的对象,那么我们不需要通过直接使用new运算符或者通过其他的创造型构造函数来创建这个指定的对象,我们只需要通知VehicleFactory我们需要什么类型的对象实例,然后VehicleFactory会返回我们所需要的类型的对象实例. 代码实现: //Car和Trunk的构造