Public Static Members
// constructorvar Gadget = function (PRice) { this.price = price;};// a static methodGadget.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 prototypeGadget.prototype.setPrice = function (price) { this.price = price;};// a normal method added to the prototypeGadget.prototype.isShiny = function () { return Gadget.isShiny.call(this);};// Attempting to call an instance method statically won’t worktypeof 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
// constructorvar 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 immediatelyvar iphone = new Gadget();iphone.getLastId(); // 1var ipod = new Gadget();ipod.getLastId(); // 2var ipad = new Gadget();ipad.getLastId(); // 3
References:
Javascript Patterns -by Stoyan Stefanov(O`Reilly)
新闻热点
疑难解答