不管你信不信反正js很高深,虽然平时都是getElementById,现在用了jQuery,这东西也很少用了,也就for,if或者字符串操作一下。
本文本着实用的原则,列举了几个常用的js代码写法,让自己的js看起来更优美。
更多详细:http://addyosmani.com/resources/essentialjsdesignpatterns/book/
-
Constructor Pattern
function Car( model, year, miles ) { this.model = model; this.year = year; this.miles = miles; } // Note here that we are using Object.prototype.newMethod rather than // Object.prototype so as to avoid redefining the prototype object Car.prototype.toString = function () { return this.model + " has done " + this.miles + " miles"; }; // Usage: var civic = new Car( "Honda Civic", 2009, 20000 ); var mondeo = new Car( "Ford Mondeo", 2010, 5000 ); console.log( civic.toString() ); console.log( mondeo.toString() );
用this声明的就相当于public的 -
Module Pattern
var myModule = { myProperty: "someValue", // object literals can contain properties and methods. // e.g we can define a further object for module configuration: myConfig: { useCaching: true, language: "en" }, // a very basic method myMethod: function () { console.log( "Where in the world is Paul Irish today?" ); }, // output a value based on the current configuration myMethod2: function () { console.log( "Caching is:" + ( this.myConfig.useCaching ) ? "enabled" : "disabled" ); }, // override the current configuration myMethod3: function( newConfig ) { if ( typeof newConfig === "object" ) { this.myConfig = newConfig; console.log( this.myConfig.language ); } } }; // Outputs: Where in the world is Paul Irish today? myModule.myMethod(); // Outputs: enabled myModule.myMethod2(); // Outputs: fr myModule.myMethod3({ language: "fr", useCaching: false });
var myNamespace = (function () { var myPrivateVar, myPrivateMethod; // A private counter variable myPrivateVar = 0; // A private function which logs any arguments myPrivateMethod = function( foo ) { console.log( foo ); }; return { // A public variable myPublicVar: "foo", // A public function utilizing privates myPublicFunction: function( bar ) { // Increment our private counter myPrivateVar++; // Call our private method using bar myPrivateMethod( bar ); } }; })();