[英]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.