JS學習2

JS面向對象    constructor:對象的構造器(構造函數)                // 使用 new 關鍵字建立                var o = new Object();                var a = new Array();                var d = new Date();            |         |                object    constructor               // 使用直接量建立                var o = {name: 'Xinyang'};                var a = [1, 2, 3];    自定義構造器:    function Person(name,age,birthdate){        this.name = name;        this.age = age;        this.birthdate = birthdate;        this.changeAge = function(newAge){            this.age = newAge;        }    }       //create object        var q = new Person('q',12,new Date(2011,2,1))        var p = new Person('p',34,new Date(2065,03,12))                p.changeAge(12)建立構造器的三種方法:1.function  ClassName(){...}2.var class = function(){...}3.var class = new Function(){...}並非全部的函數均可以當成構造器.如var o = Math.min() 一般自定義的函數均可以當成構造器使用.內置對象的構造器亦可當作構造器.若是構造器有返回值,而且是對象類型,則對象將直接返回                function Person(name,age,birthdate){                    this.name = name;                    this.age = age;                    this.birthdate = birthdate;                    this.changeAge = function(newAge){                        this.age = newAge;                    }                    return {};                }                var X = new Person('a',22,new Date())                X.name//undefined        this關鍵字:                this 在不一樣環境中指代的對象不一樣(this 指代的值可在函數運行過程當中發生改變)。                全局環境中:this指代全局對象window                var val = 10                alert(this.val)        構造器中:this指代將被構造出來的對象        函數中:指代函數的調用者                NOTE: new Function('console.log(this)') 中的 this 均指代全局對象。                eval('console.log(this) 則爲調用上下文指代的 this。        this實例:使用 apply 與 call。經過這兩個方法來將一個對象中 this 指代的目標進行改變。        function Point(x, y) {            this.x = x;            this.y = y;            this.move = function(x, y) {                this.x += x;                this.y += y;            }        }                var point = new Point(0, 0);                point.move(1, 1);                var circle = {x: 0, y: 1, r: 1};// 改變 point 中 move 方法 this 指代的對象至 circle                point.move.apply(circle, [1, 1]);// 一樣能夠用相似的 call 方法,區別爲參數需依次傳入                point.move.call(circle, 1, 1);原型繼承prototype            function Boss() {                this.age = 0;                this.birthdate = null;                this.name = '';                this.tasks = [];            }                Boss.prototype = {                    title: 'Boss',                    gretting: function(){console.log('I am a Boss!');}                }                var X = new Boss();                var Q = new Boss();// X 與 Q 中具備徹底一致(沒必要惟一的屬性或方法)// 並耗用內存的共享部分// this.title 與 this.gretting                var X = new Boss();                var Q = new Boss();        // X 與 Q 擁有相同的原型 Boss.prototype                原型鏈                使用原型繼承的方法會產生原型鏈。JavaScript 中對於對象的查找、修改和刪除都是經過原型鏈來完成的。                判斷屬性是否爲對象自己                objectName.hasOwnProperty('propertyName');        // 返回布爾值 true 或 false                屬性查找                對象的屬性查找會更隨原型鏈依次查找,若是在當前環境中沒法找到須要的屬性則會繼續向下一層原型中繼續尋找。                屬性修改                在 JavaScript 中對於對象屬性的修改永遠只修改對象自身的屬性(不管是來源於對象自己仍是對象的原型)。當建立當前對象不存在屬性時(即使原型擁有此屬性),也會爲此對象增長改屬性。                修改原型上的屬性                修改原型屬性會印象全部被建立出的對象現有的屬性和方法。                ClassName.prototype.propertyName = 'new value';                ClassName.prototype.methodName = function(){...};                屬性刪除                delete objectName.propertyName 只可刪除對象自身的屬性,沒法刪除對象的原型屬性。Object.create(proto[, propertiesObject])                其爲ECMAScript 5 中提出的新創建對象的方式。在 X 中使用隱式的原型對象指向 boss 對象,並將其設爲 X 對象的原型。var boss = {    title: 'Boss',    gretting: function(){console.log('Hi, I am a Boss!');}};                var X = Object.create(boss);                X.gretting(); // Hi, I am a Boss!                低版本中實現 Object.create 功能                此種方式仍需使用 ClassName.prototype 的方式來實現。var clone = (function(){    var F = function(){};    return function(proto) {        F.prototype = proto;        return new F();    }})();                面向對象的應用                全局變量                全局變量可在程序任意位置進行訪問和修改的變量。濫用全局變量會致使,命名衝突,致使程序不穩定。                全局標量的三種定義方法:                var gloablVal = 'value'; 。                window.gloablVal = 'value'; 附加於 window 對象上                gloablVal = 'value'; 不使用 var 關鍵字,也附加於 windwo 對象                NOTE:delete 沒法刪除在代碼最頂端定義的全局標量 var globale                封裝                信息隱藏能夠保證程序的穩定,將內部信息進行隱藏。其餘語言中可詞用訪問權限來實現封裝的概念,像 private、public。                    JavaScript 中的封裝可以使用函數的方法(閉包)。
相關文章
相關標籤/搜索