我正在浏览String
的文档,引用String.fromCharCode
。我注意到它与大多数其他String
方法的不同之处在于它在方法之前没有.prototype
,例如。 String.prototype.CharCodeAt
。我假设它必须类似于java中的静态引用,因为它的用法要求你引用String
class / Object,例如。
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
相同的方式访问它?
答案 0 :(得分:2)
在JavaScript中,函数是第一类对象。它可以直接为它分配方法属性,它将表现为静态方法:
function MyObject() {}
MyObject.static = function() { ... }
就像你期望的那样。
答案 1 :(得分:0)
DZone's参考卡为面向对象的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