成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[javascript 學(xué)習(xí)筆記] 1. 面向?qū)ο?

Berwin / 3369人閱讀

摘要:當(dāng)作構(gòu)造函數(shù)來使用,作為普通函數(shù)來使用,當(dāng)在全局作用域中調(diào)用一個(gè)函數(shù)時(shí),對(duì)象總是指向?qū)ο?。調(diào)用構(gòu)造函數(shù)時(shí)會(huì)為實(shí)例添加一個(gè)指向最初原型的的指針,而把原型修改為另外一個(gè)對(duì)象就等于切斷了構(gòu)造函數(shù)于最初原型之間的聯(lián)系。

ECMA-262 把對(duì)象定義為

  

無序?qū)傩缘募希鋵傩钥梢园局?、?duì)象或者函數(shù)。

即對(duì)象是一組沒有特定順序的值。對(duì)象的每個(gè)屬性或方法都有一個(gè)名字,而每個(gè)名字都映射到一個(gè)值。正因?yàn)檫@樣,我們可以把 ECMAScript 的對(duì)象想象成散列表:無非就是一組名值對(duì),其中值可以是數(shù)據(jù)或函數(shù)。

理解對(duì)象 屬性類型

ECMAScript 第 5 版 在定義只有內(nèi)部采用的特性(attribute)時(shí), 描述了屬性(property)的各種特征。ECMAScript 定義這些特性是為了實(shí)現(xiàn) JavaScript 引擎用的,因此在 JavaScript 中不能直接訪問它們。為表示特性是內(nèi)部值,該規(guī)范把它們放在兩對(duì)方括號(hào)中,例如 [[Enuermerable]]。

ECMAScript 中只有兩種屬性:數(shù)據(jù)屬性和訪問器屬性。

數(shù)據(jù)屬性包含一個(gè)數(shù)據(jù)值的位置。在這個(gè)位置可以讀取和寫入值。數(shù)據(jù)屬性有描述其行為的特性4個(gè):

[[Configurable]]: 表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。

[[Enumberable]]: 表示能否通過 for-in 循環(huán)返回屬性。

[[Writable]]: 表示能否修改屬性的值。

[[value]]:包含這個(gè)屬性的數(shù)據(jù)值。讀取屬性值的時(shí)候,從這個(gè)位置讀;寫入屬性值的時(shí)候,把新值保存在這個(gè)位置。

要修改屬性默認(rèn)的特性,必須用 ECMAScript 5 的 Object.defineProperty() 方法。這個(gè)方法接受三個(gè)參數(shù)`: 屬性所在的對(duì)象,屬性名,和一個(gè)描述符對(duì)象。其中,描述符(descriptor)對(duì)象的屬性必須是:configurable、enumerable、writable 和 value。

jsvar person = {};
Object.defineProperty(person,"name",{
 writable: false,
 value: "Nicholas",
 configurable: false
});


alert(person.name);//"Nicholas"
person.name = "PaddingMe";
alert(person.name);//"Nicholas"
delete person.name;
alert(person.name);//"Nicholas"

一旦把屬性定義為不可配置特性就不能再把它變?yōu)榭膳渲谩?/p>

在調(diào)用 Object.defineProperty() 方法時(shí),如果不指定, configurable, enumerable 和 writable 特性的默認(rèn)值為 false。

訪問器屬性
訪問器屬性不包含數(shù)據(jù)值,他們包含一對(duì) getter 和 setter 函數(shù)(不過不是必須的),在讀取訪問器屬性時(shí),會(huì)調(diào)用 getter 函數(shù),這個(gè)函數(shù)負(fù)責(zé)返回有效的值。在寫入訪問器屬性時(shí),會(huì)調(diào)用 setter 函數(shù)并傳入新值,此函數(shù)負(fù)責(zé)決定如何處理數(shù)據(jù)。訪問器也有4個(gè)特性:

[[Configurable]]: 表示能否通過 delete 刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性。

[[Enumberable]]: 表示能否通過 for-in 循環(huán)返回屬性。

[[get]]: 在讀取屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為 undefined。

[[set]]: 在寫入屬性時(shí)調(diào)用的函數(shù)。默認(rèn)值為 undefined。

訪問器不能直接定義,必須使用 object.defineProperty() 來定義。

 var book = {
    _year: 2004,
    edition: 1
 };

 Object.defineProperty(book, "year", {
    get: function() {
        return this._year;
    },
    set: function() {
        if (newValue > 2004) {
            this._year = newValue;
            this.edition += newValue -2004;
        }
    }
});

book.year = 2005;
alert(book.edition); //2

_year 前面的下劃線用于表示只能通過對(duì)象方法訪問的屬性。book.edition 變?yōu)?2 這是使用訪問器屬性的常見方式。即設(shè)置一個(gè)屬性的值會(huì)導(dǎo)致其他屬性發(fā)生變化。

定義多個(gè)屬性

Object.definePorperties() 接受兩個(gè)對(duì)象參數(shù):第一個(gè)要添加或修改其屬性的對(duì)象,第二個(gè)對(duì)象的屬性 與第一個(gè)對(duì)象中要添加或修改的屬性一一對(duì)應(yīng)。

讀取屬性的特性

Object.getOwnPropertyDescriptor() 方法獲取給定屬性的描述符。
此方法接受2個(gè)參數(shù):屬性所在的對(duì)象和要讀取其描述符的屬性名稱。
返回值是一個(gè)對(duì)象。

jsvar book = {};
Object.defineProperties(book,{
    _year: {value: 2004},
    edition: {value: 1},
    year: {
        get: function() {
            return this._year;
            },
        set: function() {
            if (newValue > 2004) {
                this._year = newValue;
                this.edition += newValue -2004;
            }
        }
    }
});


var descriptor = Object.getOwnPropertyDescriptor(book,"_year");
alert(descriptor.value); //2004
alert(descriptor.configurable);//false
alert(typeof descriptor.get); // "undefined"

var descriptor = Object.getOwnPropertyDescriptor(book,"year");
alert(descriptor.value); //undefined
alert(descriptor.enumerable);//false
alert(typeof descriptor.get); //function

創(chuàng)建對(duì)象

最簡(jiǎn)單的可以用 Object 構(gòu)造函數(shù),或者對(duì)象字面量來創(chuàng)建單個(gè)對(duì)象,但這樣使用一個(gè)接口創(chuàng)建很多對(duì)象,會(huì)產(chǎn)生大量的重復(fù)代碼。

jsvar paddingme = new Object(); //用 Object 構(gòu)造函數(shù) 創(chuàng)建對(duì)象
var paddingme = {}; //對(duì)象字面量創(chuàng)建對(duì)象
工廠模式

工廠模式是用函數(shù)來封裝以特定接口創(chuàng)建對(duì)象的細(xì)節(jié)。

jsfunction createPerson(name,age,job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    };
    return o;
}

var person = createPerson("PaddingMe",25,"front-end developer");

工廠模式雖然解決了創(chuàng)建多個(gè)相似對(duì)象的問題,但沒有解決對(duì)象識(shí)別的問題(即怎樣知道一個(gè)對(duì)象的類型)。

構(gòu)造函數(shù)模式
js    function Person(name, age, job) {
        this.name = name;
        this.age = age;
        this.job = job;
        this.sayName = function() {
            alert(this.name);
        };
    }

    var person1 = new Person("PaddingMe",25,"front-end developer");

    alert(person1.constructor == Person);//true
    alert(person1 instanceof Person);//true
    alert(person1 instanceof Object);//true

構(gòu)造函數(shù)模式與工廠模式不同的是:
- 沒有顯式地創(chuàng)建對(duì)象;
- 沒有 return 語句;
- 直接將屬性和方法賦給了 this 方法。

另按照慣例,構(gòu)造函數(shù)首字母都應(yīng)該大寫。

創(chuàng)建 Person 新實(shí)例,經(jīng)過了以下4個(gè)新步驟:

創(chuàng)建一個(gè)新對(duì)象;

將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此 this 就指向了這個(gè)新對(duì)象);

執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性);

返回新對(duì)象。

創(chuàng)建自定義的構(gòu)造函數(shù)意味著將來可以將它的實(shí)例標(biāo)識(shí)為一種特殊的類型,而這正是構(gòu)造函數(shù)模式勝過工廠模式的地方。

js    //當(dāng)作構(gòu)造函數(shù)來使用
    var person = new Person("paddingme",25,"F2ER");
    person.sayName();//"paddingme"

    //作為普通函數(shù)來使用;
    Person("paddingme",25,"F2ER");
    window.sayName();//"paddingme"
    //**當(dāng)在全局作用域中調(diào)用一個(gè)函數(shù)時(shí),this 對(duì)象總是指向 Global 對(duì)象。**
    //在另一個(gè)對(duì)象的作用域中調(diào)用

    var o = new Object();
    Person.call(o,"paddingme",25,"F2ER");
    o.sayName();// "paddingme"

構(gòu)造函數(shù)創(chuàng)建對(duì)象的問題在于:每個(gè)方法都要在每個(gè)實(shí)例上重新創(chuàng)建一遍,會(huì)導(dǎo)致不同的作用域鏈和標(biāo)識(shí)符解析。不同實(shí)例上的同名函數(shù)是不相等的。

原型模式

我們創(chuàng)建的每個(gè)函數(shù)都有一個(gè) prototype(原型) 屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,而這個(gè)對(duì)象的用途是包含可以由特定類型的所有實(shí)例共享的屬性和方法。 按照字面意思即 prototype 就是調(diào)用構(gòu)造函數(shù)而創(chuàng)建的那個(gè)對(duì)象實(shí)例的原型對(duì)象。使用原型對(duì)象的好處就是可以讓所有對(duì)象實(shí)例共享它所包含的屬性和方法。換言之,不必在構(gòu)造函數(shù)中定義實(shí)例的信息,而是可以將這些信息直接添加到原型對(duì)象中。

js    function Person() {}

    Person.prototype.name = "PaddingMe";
    Person.prototype.age = 29;
    Person.prototype.job = "Front-end Engineer";
    Person.prototype.sayName = function () {
        alert(this.name);
    };

    var person1 = new Person();
    person1.sayName();  //"PaddingMe"

    var person2 = new Person();
    person2.sayName();  //"PaddingMe"

理解原型對(duì)象

無論什么時(shí)候,只要?jiǎng)?chuàng)建一個(gè)新函數(shù),就會(huì)根據(jù)一組特定的規(guī)則為該函數(shù)創(chuàng)建一個(gè) prototype 屬性,這個(gè)屬性指向函數(shù)的原型對(duì)象。在默認(rèn)情況下,所有原型對(duì)象都會(huì)自動(dòng)獲得一個(gè) constructor 屬性。這個(gè)屬性包含一個(gè)指向所在函數(shù)的指針。 創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對(duì)象默認(rèn)只會(huì)取得 constructor 屬性;至于其他方法,都是從 Object 繼承而來的。當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個(gè)新實(shí)例后,該實(shí)例的內(nèi)部將包含一個(gè)指針(內(nèi)部屬性),指向構(gòu)造函數(shù)的原型對(duì)象。ECMAScript 管此指針叫 [[prototype]]

Person 構(gòu)造函數(shù)、 Person 的原型屬性以及 Person 現(xiàn)有的兩個(gè)實(shí)例之間的關(guān)系。在此,Person.prototype 指向了原型對(duì)象,而 Person.prototype.constructor 又指回了 Person。 原型對(duì)象中除了包含 constructor 屬性之外,還包括后來添加的其他屬性。 Person 的每個(gè)實(shí)例都包含一個(gè)內(nèi)部屬性,該屬性指向了 Person.prototype;換句話說,它們與構(gòu)造函數(shù)沒有直接的關(guān)系。

js alert(Person.prototype.isPrototype(person1));//true
 alert(Person.prototype.isPrototype(person2));//true

ECMASript 5 增加了Object.getPrototypeOf(),在所有支持的實(shí)現(xiàn)中,這個(gè)方法返回[[Prototype]] 的值。

jsalert(Object.getPrototypeOf(person1) == Person.prototype); // true
alert(Object.getPrototypeOf(person1).name); // "PaddingMe"

每當(dāng)代碼讀取某個(gè)對(duì)象的某個(gè)屬性時(shí),都會(huì)執(zhí)行一次搜索,目標(biāo)是具有給定名字的屬性。搜索首先從對(duì)象實(shí)例本身開始。若在實(shí)例中找到了具有給定名字的屬性,則返回該屬性的值。若沒有,則繼續(xù)搜索指針指向的原型鍍錫i昂,在原型對(duì)象中查找是否具有給定名字的屬性。若在原型對(duì)象中找到此屬性,則返回該屬性的值。

原型最初只包括 constructor 屬性,而該屬性也是共享的,因此可以通過對(duì)象實(shí)例訪問

當(dāng)為對(duì)象實(shí)例添加一個(gè)屬性時(shí),這個(gè)屬性就會(huì)屏蔽原型對(duì)象中同名屬性,換句話說,添加這個(gè)屬性只會(huì)阻止我們?cè)L問原型對(duì)象中的屬性,而不會(huì)修改那個(gè)屬性。

使用 hasOwnProperty() 方法可以檢測(cè)一個(gè)屬性是存在于實(shí)例中,還是存在于原型中。
這個(gè)方法(它繼承于 Object)只在給定屬性存在于對(duì)象實(shí)例中,才會(huì)返回 true。

jsfunction Person() {}

Person.prototype.name = "PaddingMe";
Person.prototype.age = 29;
Person.prototype.job = "Front-end Engineer";
Person.prototype.sayName = function () {
    alert(this.name);
};

var person1 = new Person();
var person2 = new Person();

alert(person1.hasOwnProperty("name"));//false

person2.name = "hhb";
alert(person2.hasOwnProperty("name"));//true
delete person2.name;
alert(person2.hasOwnProperty("name"));//false

原型與 in 操作符
在多帶帶使用時(shí),in 操作符會(huì)在通過對(duì)象能夠訪問給定屬性時(shí)返回 true,無論該屬性是在實(shí)例中還是原型中。與 hasOwnProperty() 一起使用可以確定該屬性到底是在對(duì)象中,還是存在于原型中。

jsfunction hasPrototypeProperty(){
return !object.hasOwnProperty(name) && (name in object);
}

在使用 for-in 循環(huán)時(shí), 返回的是所有能夠通過對(duì)象訪問的、可枚舉(enumerated)屬性,其中既包括存在于實(shí)例中的屬性,也包括存在于原型中的屬性。屏蔽了原型中不可枚舉屬性的實(shí)例屬性也會(huì)返回,因?yàn)楦鶕?jù)規(guī)定,所有開發(fā)人員定義的屬性都是可枚舉的——只有在 IE8 以及更早版本中例外。

要去的對(duì)象上所有可枚舉的實(shí)例屬性,可使用 ECMAScript 5 中的 Object.keys() 方法。此方法要接受一個(gè)對(duì)象作為參數(shù),返回一個(gè)包含所有可枚舉屬性的字符串組。

jsfunction Person() {}

Person.prototype.name = "PaddingMe";
Person.prototype.age = 29;
Person.prototype.job = "Front-end Engineer";
Person.prototype.sayName = function () {
    alert(this.name);
};

var keys = Object.keys(Person.prototype);
alert(keys);// "name,age,job,sayName"

var p1 = new Person();
p1.name = "hhb";
p1.age = 25;
var p1keys = Object.keys(p1);
alert(p1keys);// "name,age"

想要得到所有的實(shí)例屬性,無論它是否可枚舉,可以使用 Object.getOwnPropertyNames() 方法。

jsvar keys = Object.getOwnPropertyNames(Person.prototype);
alert(keys);// "constructor,name,age,job,sayName"

更簡(jiǎn)單的原型方法
用對(duì)象自變量來重寫真哥哥原型對(duì)象。

jsfunction Person(){
}

Person.prototype = {
name : "PaddingMe",
age : 25,
job : "F2ER",
sayName : function() {
    alert(this.name);
}
};

注意 constructor 屬性不再指向 Person,而是指向了 Object 構(gòu)造函數(shù)。

jsfunction Person(){
}

Person.prototype = {
constructor: Person,
name : "PaddingMe",
age : 25,
job : "F2ER",
sayName : function() {
    alert(this.name);
}
};

原型的動(dòng)態(tài)性
對(duì)原型對(duì)象所在的任何修改都能夠立即從實(shí)例上反映出來—— 即使是先創(chuàng)建了實(shí)例后修改原型也是一樣的。但若是重寫整個(gè)原型對(duì)象,情況就不一樣了。
調(diào)用構(gòu)造函數(shù)時(shí)會(huì)為實(shí)例添加一個(gè)指向最初原型的 [[prototype]] 的指針,而把原型修改為另外一個(gè)對(duì)象就等于切斷了構(gòu)造函數(shù)于最初原型之間的聯(lián)系。實(shí)例中的指針只指向原型,而不指向構(gòu)造函數(shù)。

jsfunction Person() {
}

var friend = new Person();

Person.prototype = {
constuctor : Person,
name : "PaddingMe",
age : 25,
sayName : function(){
    alert(this.name);
}
};

friend.sayName(); //error

原生對(duì)象的原型

jsString.prototype.startsWith = function (text) {
    return this.indexOf(text) == 0;
}

var msg = "Hello world!";
alert(msg.startsWith("Hello")); //true

原型對(duì)象的問題
所有實(shí)例在默認(rèn)情況下都將取得相同的屬性值。原型模式的最大問題是由其共享的本性所導(dǎo)致。

jsfuntion Person(){
}

Person.prototype = {
    constuctor: Person,
    name: "PaddingMe",
    age: 26,
    job: "F2ER",
    friends: ["hw","wjj"],
    sayName: function() {
        alert(this.name);
    }
};

var person1 = new Person();
var person2 = new Person();

Person1.friends.push("ex");
alert(person1.friends);//"hw,wjj,ex"
alert(person2.friends);//"hw,wjj,ex"
alert(person1.friends == person2.friends);//true

組合使用構(gòu)造函數(shù)模式和原型模式

構(gòu)造函數(shù)模式用于定義實(shí)例屬性,而原型模式用于定義方法和共享的屬性。

jsfunction Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["hw","wjj"];
}

Person.prototype = {
    constructor: Person,
    sayName: function() {
        alert(this.name);
    }
}

var person1 = new Person("winter",59,"Full-Stack Enginner");
var person2 = new Person("PaddingMe",25,"F2ER");

person1.friends.push("ex");
alert(person1.friends); // "hw,wjj,ex"
alert(person2.friends); // "hw,wjj"
alert(person1.friends ==  person2.friends); //false
alert(person1.sayName ==  person2.sayName); //true
動(dòng)態(tài)原型模式
jsfunction Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;

    if(typeof this.sayName != "funtion") {
        Person.prototype.sayName = function(){
            alert(this.name);
        };
    }
}

var friend = new Person("PaddingMe",25,"F2ER");
friend.sayName();
寄生構(gòu)造函數(shù)模式

寄生(parasitic)構(gòu)造函數(shù)模式的基本思想是:創(chuàng)建一個(gè)函數(shù),該函數(shù)的作用僅僅是封裝創(chuàng)建對(duì)象的代碼,然后再返回新創(chuàng)建的對(duì)象;但從表面上看,有很像典型的構(gòu)造函數(shù)。

jsfunction Person(name,age,job) {
    var o = new Object();
    o.name = name;
    o.age = age;
    o.job = job;
    o.sayName = function() {
        alert(this.name);
    }
    return o;
}

var friend = new Person("PaddingMe",25,"F2ER");
friend.sayName;// "PaddingMe"
js    function SpecialArray() {
        var values = new Array();
        values.push.apply(values,arguments);

        values.toPipedString = function() {
            return this.join("|");
        }
    }

    var colors = new SpecialArray("red","blue","green");
    alert(colors.toPipedString());//"red|blue|green"

關(guān)于寄生構(gòu)造函數(shù)模式需要說明的是:
返回的對(duì)象與構(gòu)造函數(shù)或者與構(gòu)造函數(shù)的原型屬性之間沒有關(guān)系,亦即構(gòu)造函數(shù)返回的都喜愛那個(gè)與在構(gòu)造函數(shù)外部建立的對(duì)象沒什么不同。所以不能依賴 instanceof 操作符來確定對(duì)象模型。

穩(wěn)妥構(gòu)造函數(shù)模式

所謂穩(wěn)妥對(duì)象是指沒有公共屬性,而且其方法也引用 this 的對(duì)象。穩(wěn)妥對(duì)象最適合在一些安全的環(huán)境中(這些環(huán)境中會(huì)禁止使用 this 和 new),或者在防止數(shù)據(jù)被其他應(yīng)用程序(如 Mashup 程序)改動(dòng)時(shí)使用。
穩(wěn)妥構(gòu)造函數(shù)模式與寄生構(gòu)造函數(shù)模式不一樣的是:
- 新創(chuàng)建對(duì)象的實(shí)例方法不引用 this;
- 不使用 new 操作符調(diào)用構(gòu)造函數(shù)。

jsfunction Person(name,age,job) {
    var o = new Object();
    o.sayName = function (){
        alert(name);
    };
    return o;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/85476.html

相關(guān)文章

  • 重學(xué)前端學(xué)習(xí)筆記(七)--JavaScript對(duì)象面向對(duì)象還是基于對(duì)象?

    摘要:對(duì)象有狀態(tài)對(duì)象具有狀態(tài),同一對(duì)象可能處于不同狀態(tài)之下。中對(duì)象獨(dú)有的特色對(duì)象具有高度的動(dòng)態(tài)性,這是因?yàn)橘x予了使用者在運(yùn)行時(shí)為對(duì)象添改狀態(tài)和行為的能力。小結(jié)由于的對(duì)象設(shè)計(jì)跟目前主流基于類的面向?qū)ο蟛町惙浅4?,?dǎo)致有不是面向?qū)ο筮@樣的說法。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些...

    mayaohua 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(七)--JavaScript對(duì)象面向對(duì)象還是基于對(duì)象?

    摘要:對(duì)象有狀態(tài)對(duì)象具有狀態(tài),同一對(duì)象可能處于不同狀態(tài)之下。中對(duì)象獨(dú)有的特色對(duì)象具有高度的動(dòng)態(tài)性,這是因?yàn)橘x予了使用者在運(yùn)行時(shí)為對(duì)象添改狀態(tài)和行為的能力。小結(jié)由于的對(duì)象設(shè)計(jì)跟目前主流基于類的面向?qū)ο蟛町惙浅4螅瑢?dǎo)致有不是面向?qū)ο筮@樣的說法。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些...

    yy736044583 評(píng)論0 收藏0
  • 重學(xué)前端學(xué)習(xí)筆記(七)--JavaScript對(duì)象面向對(duì)象還是基于對(duì)象

    摘要:對(duì)象有狀態(tài)對(duì)象具有狀態(tài),同一對(duì)象可能處于不同狀態(tài)之下。中對(duì)象獨(dú)有的特色對(duì)象具有高度的動(dòng)態(tài)性,這是因?yàn)橘x予了使用者在運(yùn)行時(shí)為對(duì)象添改狀態(tài)和行為的能力。小結(jié)由于的對(duì)象設(shè)計(jì)跟目前主流基于類的面向?qū)ο蟛町惙浅4螅瑢?dǎo)致有不是面向?qū)ο筮@樣的說法。 筆記說明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過程的一些...

    xingpingz 評(píng)論0 收藏0
  • JavaScript面向對(duì)象編程學(xué)習(xí)筆記---概念定義

    摘要:子類繼承自父類的方法可以重新定義即覆寫,被調(diào)用時(shí)會(huì)使用子類定義的方法什么是多態(tài)青蛙是一個(gè)對(duì)象,金魚也是一個(gè)對(duì)象,青蛙會(huì)跳,金魚會(huì)游,定義好對(duì)象及其方法后,我們能用青蛙對(duì)象調(diào)用跳這個(gè)方法,也能用金魚對(duì)象調(diào)用游這個(gè)方法。 1、專用術(shù)語 面向?qū)ο缶幊坛绦蛟O(shè)計(jì)簡(jiǎn)稱:OOP,在面向?qū)ο缶幊讨谐S玫降母拍钣校簩?duì)象、屬性、方法、類、封裝、聚合、重用與繼承、多態(tài)。 2、什么是對(duì)象? 面向?qū)ο缶幊痰闹攸c(diǎn)...

    mikasa 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)筆記第四天_面向對(duì)象編程

    摘要:即另外,注意到構(gòu)造函數(shù)里的屬性,都沒有經(jīng)過進(jìn)行初始化,而是直接使用進(jìn)行綁定。并且在模式下,構(gòu)造函數(shù)沒有使用進(jìn)行調(diào)用,也會(huì)導(dǎo)致報(bào)錯(cuò)。調(diào)用構(gòu)造函數(shù)千萬不要忘記寫。 1. 基礎(chǔ) JavaScript不區(qū)分類和實(shí)例的概念,而是通過原型來實(shí)現(xiàn)面向?qū)ο缶幊?。Java是從高級(jí)的抽象上設(shè)計(jì)的類和實(shí)例,而JavaScript的設(shè)計(jì)理念,聽起來就好比Heros里的Peter,可以復(fù)制別人的能力。JavaS...

    weapon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<