Time of Update: 2017-01-18
一、引用 複製代碼 代碼如下://產生一個數組對象 var items = new Array('1','2','3'); //使一個引用指向該對象 var itemRef = items; items.push('4'); //items 與 itemRef指向同一對象 alert(items.length === itemRef.length); // 修改對象會產生一個新對象 var item = 'test'; var itemRef = item; item+='ing';
Time of Update: 2017-01-18
好程式不是寫給computer的,而是寫給human的。遇到複雜功能,應該想著把它簡化、組件化,把小功能封裝成小工具,小功能塊可以任意的組合得到千變萬化的複雜功能。function就可以協助我們把功能進行封裝。那什麼是封裝呢。要我說,只要把具體實現給打包,對外提供調用介面那就是封裝,方法也好、類也好就做了這些事。
Time of Update: 2017-01-18
先看一下JSON(javascript object notation)對象,JSON是一種指令碼操作時常用的資料交換格式對象,相對於XML來說JSON是一種比較輕量級的格式,在一些intelligence的IDE中還可以方便的通過點操作JSON對象中的成員。 JSON是一種鍵/值對方式來描述內部成員的格式,其內部成員可以是幾乎任何一種類型的對象,當然也可以是方法、類、數組,也可以是另外一個JSON對象。 var
Time of Update: 2017-01-18
javascript和java、C#等語言一樣也具有物件導向的一些特徵,但細比較的時候,會發現這些特徵並不是真正的物件導向,很多地方都是利用對象本身來類比物件導向,所以認為javascript不能算是物件導向程式設計語言,而是基於對象的語言。 在javascript中真的是萬物皆對象,new出來的東西是對象,方法是對象,連類也都是對象。下面分別來看一下對象、方法和類的對象特徵。 1.拿內建的Date來看一下吧 複製代碼 代碼如下: var time = new Date(); var
Time of Update: 2017-01-18
但javascript中並沒有類概念,所謂的類也是類比而來,通過函數加閉包類比出類成員及私人成員(關於閉包可以參見跨越邊界: 閉包)。這裡我們將用比較平實的方式來瞭解一下javascript中的”類”,避開一些生硬的原理。 既然是用function來類比類,所以編寫代碼建立類的關鍵字還是function。我們建立一個座標點類。 function Point() { this.X = 0; this.Y = 0
Time of Update: 2017-01-18
目前 javascript的實現繼承方式並不是通過“extend”關鍵字來實現的,而是通過 constructor function和prototype屬性來實現繼承。首先我們建立一個animal 類 js 代碼 複製代碼 代碼如下: var animal = function (){ //這就是constructor function 了 this .name = 'pipi'; this .age = 10; this .height = 0; } //建立一個動物的執行個體 var a1
Time of Update: 2017-01-18
複製代碼 代碼如下: /* 工廠方式--- 建立並返回特定類型的對象的 工廠函數 ( factory function ) */ function createCar(color,doors,mpg){ var tempCar = new Object; tempCar.color = color; tempCar.doors = doors; tempCar.mpg = mpg; tempCar.showCar = function(){ alert(this.color + " " +
Time of Update: 2017-01-18
複製代碼 代碼如下: <script> //定義一個javascript類 function JsClass(privateParam/* */,publicParam){//建構函式 var priMember = privateParam; //私人變數 this.pubMember = publicParam; //公開變數 //定義私人方法 function priMethod(){ return "priMethod()"; } //定義特權方法
Time of Update: 2017-01-18
Javascript已經可以類比出物件導向的封裝和繼承特性,但是不幸的是Javascript對多態特性的支援非常弱!其它物件導向語言的多態一般都由方法重載和虛方法來實現多態,Javascript也通過這兩種途徑來實現! 重載:由於Javascript是弱類型的語言,而且又支援可變參數,當我們定義重載方法的時候,解譯器無法通過參數類型和參數個數來區分不同的重載方法,因此方法重載是不被支援的!當先後定義了同名的方法的時候,後定義的方法會覆蓋先定義的方法!
Time of Update: 2017-01-18
我們看到這裡繼承的概念是多麼的直白,“拷貝一個類的prototype 到另外一個類”,好,Code is cheap,看代碼: function class1() { } function class2() { } class2.prototype = class1.prototype; class2.moreProperty1 = " class 2 additional string " ; class2.moreMethod1 = function () { alert( " class
Time of Update: 2017-01-18
很長一段時間以來(這裡本人要幸災樂禍地說),js是“一種點綴的作用,完成很有限的功能,諸如表單驗證之類,其語言本身也一直被當作過程化的語言使用,很難完成複雜的功能。”。但是(這裡本人要苦大仇深、痛心疾首地說),“而Ajax的出現使得複雜指令碼成為必需的組成部分,這就對 JavaScript 程式設計提出了新的要求,很多Ajax應用開始利用JavaScript物件導向的性質進行開發,使邏輯更加清晰。事實上,JavaScript
Time of Update: 2017-01-18
建立一個對象 Java代碼 複製代碼 代碼如下: <script type="text/javaScript"> var newObject=new Object(); //建立一個對象 newObject.firstName="frank"; //增加一個firstName屬性 newObject.sayName=function(){ alert(this.firstName); } //添加一個sayName方法 //調用sayName方法 //
Time of Update: 2017-01-18
複製代碼 代碼如下: /* Basic Singleton. */ var Singleton = { attribute1: true, attribute2: 10, method1: function() { }, method2: function(arg) { } }; 單件模式最主要的用途之一就是命名空間: /* GiantCorp namespace. */ var GiantCorp = {}; GiantCorp.Common = { // A singleton with
Time of Update: 2017-01-18
JS沒有提供所謂的類繼承,據說在2.0中要加入這種繼承方式,但是要所有瀏覽器都實現2.0的特性那肯定又得N多年。昨天看了crockford 的一個視頻,裡面講解了一下JS的繼承方式,按照PPT裡面說的,一共分了三類:Prototypal,pseudoclassical,Parasitic Inheritance。 下面主要介紹一下原型繼承:When a function object is created, it is given a prototype member which is an
Time of Update: 2017-01-18
複製代碼 代碼如下: <script type="text/javascript"> function Base(){} //根抽象類別 Base.toBase=function(){ //將一個對象轉化成Base類的執行個體的方法 return new Base(); } Base.inherit=function(parent){ //用於繼承Base類的執行個體的方法 var F=function(){} F.prototype=parent; return new F; }
Time of Update: 2017-01-18
複製代碼 代碼如下: /** * @author Supersha * @QQ:770104121 */ var cssQuery = { //parent:用於儲存當前節點的父節點的引用 parent: document, select: function(selectorStr){ var selectors=selectorStr.split(" "); //分隔字串 for (var i = 0, len = selectors.length; i < len; i++) {
Time of Update: 2017-01-18
Classical Inheritance in JavaScript。 Crockford是JavaScript開發社區最知名的權威,是JSON、JSLint、JSMin和ADSafe之父,是《JavaScript: The Good Parts》的作者。 現在是Yahoo的資深JavaScript架構師,參與YUI的設計開發。 這裡有一篇文章詳細介紹了Crockford的生平和著作。 當然Crockford也是我等小輩崇拜的對象。調用方式
Time of Update: 2017-01-18
註:本章中的jClass的實現參考了Simple JavaScript Inheritance的做法。首先讓我們來回顧一下第一章中介紹的例子: function Person(name) {this.name = name;}Person.prototype = {getName: function() {return this.name;}}function Employee(name, employeeID) {this.name = name;this.employeeID =
Time of Update: 2017-01-18
thisthis表示當前對象,如果在全域作用範圍內使用this,則指代當前頁面對象window; 如果在函數中使用this,則this指代什麼是根據運行時此函數在什麼對象上被調用。 我們還可以使用apply和call兩個全域方法來改變函數中this的具體指向。 先看一個在全域作用範圍內使用this的例子: <script type="text/javascript"> console.log(this === window); // true
Time of Update: 2017-01-18
物件導向與基於對象幾乎每個開發人員都有物件導向語言(比如C++、C#、Java)的開發經驗。 在傳統物件導向的語言中,有兩個非常重要的概念 - 類和執行個體。 類定義了一類事物公用的行為和方法;而執行個體則是類的一個具體實現。 我們還知道,物件導向編程有三個重要的概念 - 封裝、繼承和多態。 但是在JavaScript的世界中,所有的這一切特性似乎都不存在。 因為JavaScript本身不是物件導向的語言,而是基於對象的語言。