


1.不清楚為什么上面要寫一個this._init()?
2.原型的_init()應該是覆寫了上面的init吧,js不支持多載好像?
uj5u.com熱心網友回復:
this._init() 不是定義 是呼叫 , 他把下面那個 _init 函式呼叫了一次uj5u.com熱心網友回復:
在 new JackTokenizer() 的時候, 這個 this 就代表新 new 出來的實體,可以呼叫到原型鏈上的 _init 函式,所以他這里就是呼叫一下uj5u.com熱心網友回復:
感謝 能加個qq嗎?1825491283uj5u.com熱心網友回復:
你知道拖拉機嗎?
前面就是物件的建構式,后面的車斗就是建構式的原型物件,也就是prototype。
當你new一個JackTokenizer物件時,就像是按照上面的圖紙造了一輛拖拉機。
建構式中的屬性和方法都會在物件中創建一遍。
這時this指向的就是這個新的物件。
而原型物件prototype是所有建構式創造出來的物件共有的。
呼叫物件的屬性或方法個規則為:先到物件中查找是否存在某個屬性或方法。如果存在,則讀取或呼叫;如不存在,則到物件共用的原型物件prototype中查找,如果存在,則讀取或呼叫;如果還不存在,則沿著原型物件查找原型物件的原型物件。(應為原型物件也是物件,不用懷疑,這就是套娃)
uj5u.com熱心網友回復:
1.那創建很多個物件豈不是會造成很多個車頭只有一個車斗?
2.jack原型的原型如何定義?不能定義如何來套娃?
uj5u.com熱心網友回復:
哥 看看我的回復
uj5u.com熱心網友回復:
1. 一個原型就是會對應很多的實體的,這有點像靜態方法
2. 原型的原型 是 原型的的類的原型物件。 這里原型是Object類,那么定義原型的原型就要定義 Object.prototype
uj5u.com熱心網友回復:
每當代碼讀取某個物件的某個屬性時,都會執行一次搜索,目標是具有給定名字的屬性。搜索首先從物件實體本身開始。如果在實體中找到了具有給定名字的屬性,則回傳該屬性的值;如果沒有找到,則繼續搜索指標指向的原型物件,在原型物件中查找具有給定名字的屬性。如果在原型物件中找到了這個屬性,則回傳該屬性的值。也就是說,在我們呼叫person1.sayName()的時候,會先后執行兩次搜索。首先,決議器會問:“實體person1有sayName屬性嗎?”答:“沒有。”然后,它繼續搜索,再問:“person1的原型有sayName屬性嗎?”答:“有。”于是,它就讀取那個保存在原型物件中的函式。當我們呼叫person2.sayName()時,將會重現相同的搜索程序,得到相同的結果。而這正是多個物件實體共享原型所保存的屬性和方法的基本原理。——《JavaScript高級程式設計》(第3版) 第六章
1.那創建很多個物件豈不是會造成很多個車頭只有一個車斗?
答:
每錯,但是不要想象成五馬分尸的樣子,事實上使用原型物件的好處是可以讓所有物件實體共享它所包含的屬性和方法。例如:建構式中有一個sayHello()方法。那么new出來的每一個物件中都包含一個sayHello()方法,但每個物件的sayHello()方法是不同的,他們在記憶體中占有獨立的空間,但他們所做的事情確實相同的。如果需要100個這樣的物件,那么就要在記憶體中開辟出100個空間,大量的空間做著重復的事情,這是一個優秀開發者所不能容忍的。因此,原型物件提供了資源共享的機會。
2.jack原型的原型如何定義?不能定義如何來套娃?
答:
function Person(age) {
this.age = age;
}
Person.prototype.eat = function () {
console.log("吃榴蓮")
};
var per = new Person(10);
console.dir(per);
console.dir(Person);
實體物件中有__proto__原型
建構式中有prototype原型物件
prototype也是個物件所以也有__proto__原型
實體物件中的__proto__指向的是構造函數的原型物件
所以prototype中的__proto__指向的某個建構式的prototype原型
Person中的prototype中的__proto__的指向:
console.log(Person.prototype.__proto__);//Object
實體物件per中的__proto__指向的是Person中的prototype,
Person中的prototype中的__proto__指向的是Object中的prototype,
Object中的prototype中的__proto__指向的是null
uj5u.com熱心網友回復:
每當代碼讀取某個物件的某個屬性時,都會執行一次搜索,目標是具有給定名字的屬性。搜索首先從物件實體本身開始。如果在實體中找到了具有給定名字的屬性,則回傳該屬性的值;如果沒有找到,則繼續搜索指標指向的原型物件,在原型物件中查找具有給定名字的屬性。如果在原型物件中找到了這個屬性,則回傳該屬性的值。也就是說,在我們呼叫person1.sayName()的時候,會先后執行兩次搜索。首先,決議器會問:“實體person1有sayName屬性嗎?”答:“沒有。”然后,它繼續搜索,再問:“person1的原型有sayName屬性嗎?”答:“有。”于是,它就讀取那個保存在原型物件中的函式。當我們呼叫person2.sayName()時,將會重現相同的搜索程序,得到相同的結果。而這正是多個物件實體共享原型所保存的屬性和方法的基本原理。——《JavaScript高級程式設計》(第3版) 第六章
1.那創建很多個物件豈不是會造成很多個車頭只有一個車斗?
答:
每錯,但是不要想象成五馬分尸的樣子,事實上使用原型物件的好處是可以讓所有物件實體共享它所包含的屬性和方法。例如:建構式中有一個sayHello()方法。那么new出來的每一個物件中都包含一個sayHello()方法,但每個物件的sayHello()方法是不同的,他們在記憶體中占有獨立的空間,但他們所做的事情確實相同的。如果需要100個這樣的物件,那么就要在記憶體中開辟出100個空間,大量的空間做著重復的事情,這是一個優秀開發者所不能容忍的。因此,原型物件提供了資源共享的機會。
2.jack原型的原型如何定義?不能定義如何來套娃?
答:
function Person(age) {
this.age = age;
}
Person.prototype.eat = function () {
console.log("吃榴蓮")
};
var per = new Person(10);
console.dir(per);
console.dir(Person);
實體物件中有__proto__原型
建構式中有prototype原型物件
prototype也是個物件所以也有__proto__原型
實體物件中的__proto__指向的是建構式的原型物件
所以prototype中的__proto__指向的某個建構式的prototype原型
Person中的prototype中的__proto__的指向:
console.log(Person.prototype.__proto__);//Object
實體物件per中的__proto__指向的是Person中的prototype,
Person中的prototype中的__proto__指向的是Object中的prototype,
Object中的prototype中的__proto__指向的是null
我靠 這 我先去學習下 __proto__ 和prototype的區別。。
如果可以 的話 我qq1825491283
自己 剛看前端 幾天 非計算機專業 。。感覺挺困難的
希望可以 咨詢下 相關問題 。
uj5u.com熱心網友回復:
每當代碼讀取某個物件的某個屬性時,都會執行一次搜索,目標是具有給定名字的屬性。搜索首先從物件實體本身開始。如果在實體中找到了具有給定名字的屬性,則回傳該屬性的值;如果沒有找到,則繼續搜索指標指向的原型物件,在原型物件中查找具有給定名字的屬性。如果在原型物件中找到了這個屬性,則回傳該屬性的值。也就是說,在我們呼叫person1.sayName()的時候,會先后執行兩次搜索。首先,決議器會問:“實體person1有sayName屬性嗎?”答:“沒有。”然后,它繼續搜索,再問:“person1的原型有sayName屬性嗎?”答:“有。”于是,它就讀取那個保存在原型物件中的函式。當我們呼叫person2.sayName()時,將會重現相同的搜索程序,得到相同的結果。而這正是多個物件實體共享原型所保存的屬性和方法的基本原理。——《JavaScript高級程式設計》(第3版) 第六章
1.那創建很多個物件豈不是會造成很多個車頭只有一個車斗?
答:
每錯,但是不要想象成五馬分尸的樣子,事實上使用原型物件的好處是可以讓所有物件實體共享它所包含的屬性和方法。例如:建構式中有一個sayHello()方法。那么new出來的每一個物件中都包含一個sayHello()方法,但每個物件的sayHello()方法是不同的,他們在記憶體中占有獨立的空間,但他們所做的事情確實相同的。如果需要100個這樣的物件,那么就要在記憶體中開辟出100個空間,大量的空間做著重復的事情,這是一個優秀開發者所不能容忍的。因此,原型物件提供了資源共享的機會。
2.jack原型的原型如何定義?不能定義如何來套娃?
答:
function Person(age) {
this.age = age;
}
Person.prototype.eat = function () {
console.log("吃榴蓮")
};
var per = new Person(10);
console.dir(per);
console.dir(Person);
實體物件中有__proto__原型
建構式中有prototype原型物件
prototype也是個物件所以也有__proto__原型
實體物件中的__proto__指向的是建構式的原型物件
所以prototype中的__proto__指向的某個建構式的prototype原型
Person中的prototype中的__proto__的指向:
console.log(Person.prototype.__proto__);//Object
實體物件per中的__proto__指向的是Person中的prototype,
Person中的prototype中的__proto__指向的是Object中的prototype,
Object中的prototype中的__proto__指向的是null
我靠 這 我先去學習下 __proto__ 和prototype的區別。。
如果可以 的話 我qq1825491283
自己 剛看前端 幾天 非計算機專業 。。感覺挺困難的
希望可以 咨詢下 相關問題 。
看《JavaScript高級程式設計》,微信讀書就可以看
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/21969.html
標籤:JavaScript
