在 DOM(HTML 決議檔案的 JS 表示)中,我們有這樣的結構(其中<表示“繼承”):
Object(JS object) < Node < Element < HTMLElment < HTMLBodyElement, HTMLDivElement, etc..
Object(JS object) < Node < DOcument < HTMLDocument
...
在我檢查過的每個檔案中,所有這些節點都稱為介面(https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement )。
我不明白這在 JS 中怎么可能(不是面向物件,沒有介面等)?我有 C 的背景,所以也許我將 DOM“面向物件”結構與真正的結構混淆了。任何澄清?
uj5u.com熱心網友回復:
我不明白這在 JS 中怎么可能(不是面向物件,沒有介面等)?
在 JavaScript 中建模 DOM 的結構沒有問題。JavaScript非常面向物件,包括支持繼承。JavaScript 使用原型繼承。例子:
顯示代碼片段
// Create an object with a method
const base = {
baseMethod() {
console.log("baseMethod");
}
};
// Create an object using `base` as its prototype,
// perhaps add a property to it
const sub = Object.assign(Object.create(base), {
subMethod() {
console.log("subMethod");
}
});
// Sub inherits `base`'s properties
sub.baseMethod(); // "baseMethod"
// And has its own
sub.subMethod(); // "subMethod"
JavaScript 還在原型繼承之上覆寫了一些看起來很像的東西class(它不是,它仍然是原型,但對于來自基于類的語言的人來說更舒服)。例如,這是一個使用語法的三層繼承模型(很像Node< Element< ) (但同樣,我們也可以在沒有語法的情況下完成所有這些作業):HTMLElementclassclass
顯示代碼片段
class Base {
baseMethod() {
console.log("baseMethod");
}
}
class Sub extends Base {
subMethod() {
console.log("subMethod");
}
}
class SubSub extends Sub {
subSubMethod() {
console.log("subSubMethod");
}
}
const x = new SubSub();
x.baseMethod(); // "baseMethod"
x.subMethod(); // "subMethod"
x.subSubMethod(); // "subSubMethod"
console.log(x instanceof Base); // true
console.log(x instanceof Sub); // true
console.log(x instanceof SubSub); // true
console.log(x instanceof Date); // false (just to show it's not always true ;-) )
(該Object結構的基礎是隱含的。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/487857.html
標籤:javascript dom
