我有一些我想重構和改進的舊代碼,目前代碼看起來像這樣:
function objFunction1(obj){
//do something
console.log(obj, 1);
}
function objFunction2(obj){
//do something else
console.log(obj, 2)
}
var obj = {test: true};
objFunction1(obj);
objFunction2(obj);
我正在考慮把它變成一個類,例如:
class item{
constructor(test){
this.test = test;
return this;
}
function1(){
console.log(this, 1);
}
function2(){
console.log(this, 2);
}
}
var obj = new item(true);
obj.function1();
obj.function2();
JavaScript 如何處理這個問題?如果我有 10,000 個實體,itemJavaScript 是為每個實體復制這些方法還是只存盤對類宣告的參考?
我基本上要問的是,我的原始代碼效率更高嗎?
uj5u.com熱心網友回復:
如果您擁有100000或任意數量的物件,但function1并function2會在只有單拷貝其prototype
由于類語法只是舊函式建構式的語法糖。當您撰寫上述類語法時,方法在prototype該類的中宣告,您可以將其驗證為:
const obj1 = new item(true);
const obj2 = new item(false);
obj1.function1 === obj2.function1;
如果obj1.function1 === obj2.function1運算式回傳,true則意味著只有一個函式定義在它的prototype
你應該閱讀檔案
class item {
constructor(test) {
this.test = test;
return this;
}
function1() {
console.log(this, 1);
}
function2() {
console.log(this, 2);
}
}
const obj1 = new item(true);
const obj2 = new item(false);
console.log(obj1.function1 === obj2.function1); // true
注意:我已經將建構式的第一個字母大寫,外部指定它是一個建構式。它只是 JS 社區中使用的約定
上面的類語法將等于下面的函式建構式語法:
function function1() {
console.log(this, 1);
}
function function2() {
console.log(this, 2);
}
function Item(test) {
this.test = test;
}
Item.prototype.function1 = function1;
Item.prototype.function2 = function2;
const obj1 = new Item(true);
const obj2 = new Item(false);
console.log(obj1);
console.log(obj2);
console.log(obj1.function1 === obj2.function1);
uj5u.com熱心網友回復:
最簡潔的答案是不。
功能不會重復;在物件原型中只會為每個函式創建一個定義。
Javascript 使用基于原型的繼承,這意味著物件具有一個原型,該原型“包含”同一原型中所有物件共享的方法。
JavaScript 通常被描述為一種基于原型的語言——為了提供繼承,物件可以有一個原型物件,它作為一個模板物件,它從中繼承了方法和屬性。
來源:https : //developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes
如果您使用相同的“類”宣告兩個物件,您可以看到它們的實體不同但方法相同
var objA = 新專案(真);var objB = 新專案(真);
objA === objB // false objA.function1 === objA.function
您可以使用有點過時(但仍受 Chrome 支持)的proto屬性來訪問物件的原型
objA.__proto__ === objB.__proto__ // true
因此,就記憶體和執行時間而言,這兩個選項可能幾乎相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/387113.html
標籤:javascript
