簡體   English   中英

您如何在JavaScript中實現類似靜態方法的功能?

[英]How do you implement something like a static method in JavaScript?

在瀏覽String文檔時,引用了String.fromCharCode 我注意到它與大多數其他String方法的不同之處在於,在方法Ex之前沒有.prototype String.prototype.CharCodeAt 我假定它必須類似於java中的靜態引用,因為它的用法要求您引用String類/對象,例如。

var str = "foo";
var code = str.charCodeAt(0);
var character = String.fromCharCode(code); // This is the reference I'm talking about
alert(code); // Output: 102
alert(character); // Output: f

我的問題是,您將如何實現一個方法,以便在您自己的代碼中以與String.fromCharCode相同的樣式進行訪問?

在JavaScript中,函數是一流的對象。 這樣就可以直接為其分配方法屬性,該屬性的行為類似於靜態方法:

function MyObject() {}
MyObject.static = function() { ... }

就像您期望的那樣。

DZone的 ref卡為面向對象的javascript提供了很好的參考,我強烈推薦它。 相關段落

沒有直接支持靜態成員。 構造函數用於創建靜態成員。 靜態成員無法使用“ this”關鍵字進行訪問。

私人靜態成員

   function Factory(){}
    // public static method
    Factory.getType = function (){
      return “Object Factory”;
    };

    // public static field
    Factory.versionId = “F2.0”;
    Factory.prototype.test = function(){
      console.log(this.versionId); // undefined
      console.log(Factory.versionId); // F2.0
      console.log(Factory.getType()); // Object Factory
    }
    var factory = new Factory();
    factory.test();

公共靜態成員

var Book = (function () {
// private static field
    var numOfBooks = 0;
// private static method
    function checkIsbn(isbn) {
        if (isbn.length != 10 && isbn.length != 13)
            throw new Error(“isbn is not valid!”);
    }

    function Book(isbn, title) {
        checkIsbn(isbn);
        this.isbn = isbn;
        this.title = title;
        numOfBooks++;
        this.getNumOfBooks = function () {
            return numOfBooks;
        }
    }

    return Book;
})();
var firstBook = new Book(“0-943396-04-2”, “First Title”);
console.log(firstBook.title); // First Title
console.log(firstBook.getNumOfBooks()); // 1
var secondBook = new Book(“0-85131-041-9”, “Second Title”);
console.log(firstBook.title); // First Title
console.log(secondBook.title); // Second Title
console.log(firstBook.getNumOfBooks()); // 2
console.log(secondBook.getNumOfBooks()); // 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM