zoukankan      html  css  js  c++  java
  • JavaScript Patterns 5.6 Static Members

    Public Static Members

    // constructor
    
    var Gadget = function (price) {
    
        this.price = price;
    
    };
    
    // a static method
    
    Gadget.isShiny = function () {
    
        // this always works
    
        var msg = "you bet";
    
        // Checking if the static method is called by instance.
    
        if (this instanceof Gadget) {
    
            // this only works if called non-statically
    
            msg += ", it costs $" + this.price + '!';
    
        }
    
        return msg;
    
    };
    
    
    // a normal method added to the prototype
    
    Gadget.prototype.setPrice = function (price) {
    
        this.price = price;
    
    };
    
    
    // a normal method added to the prototype
    
    Gadget.prototype.isShiny = function () {
    
        return Gadget.isShiny.call(this);
    
    };
    
    
    // Attempting to call an instance method statically won’t work
    
    typeof Gadget.setPrice; // "undefined"

     

    Testing a static method call:

    Gadget.isShiny(); // "you bet"

     

    Testing an instance, nonstatic call:

    var a = new Gadget('499.99');
    
    a.isShiny(); // "you bet, it costs $499.99!"

    Private Static Members

    • Shared by all the objects created with the same constructor function

    • Not accessible outside the constructor

    // constructor
    
    var Gadget = (function () {
    
        // static variable/property
    
        var counter = 0,
    
            NewGadget;
    
        // this will become the new constructor implementation
    
        NewGadget = function () {
    
            counter += 1;
    
        };
    
        // a privileged method
    
        NewGadget.prototype.getLastId = function () {
    
            return counter;
    
        };
    
        // overwrite the constructor
    
        return NewGadget;
    
    }()); // execute immediately
    
    
    var iphone = new Gadget();
    
    iphone.getLastId(); // 1
    
    var ipod = new Gadget();
    
    ipod.getLastId(); // 2
    
    var ipad = new Gadget();
    
    ipad.getLastId(); // 3

    References: 

    JavaScript Patterns - by Stoyan Stefanov (O`Reilly)

  • 相关阅读:
    【扩展】1. PHP 大括号{} 的使用
    preg_replace 中修正符 e 的解析
    terminal 修改终端显示的名字
    find 命令详解
    OSI 7层结构 粗认识
    vi 全解析
    awk 学习笔记
    scp 复制远程文件 文件带空格 处理
    更新博客地址啦!!!
    ubuntu16.04安装NVIDIA驱动遇到的问题
  • 原文地址:https://www.cnblogs.com/haokaibo/p/Static-Members.html
Copyright © 2011-2022 走看看