欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript中的對象和原型

羅一凡1年前7瀏覽0評論

JavaScript是一門基于對象的語言,所有數(shù)據(jù)類型都是對象,也就是說JavaScript中最基本的概念就是對象,而對象的核心特性就是原型。在JavaScript中,每個對象都有一個原型對象,原型對象又有自己的原型對象,構(gòu)成了原型鏈,而原型鏈的作用就是讓對象之間產(chǎn)生繼承關(guān)系。

在JavaScript中創(chuàng)建對象有多種方式,最常用的方式就是通過字面量創(chuàng)建對象。比如我們定義一個人的對象:

let person = {
name: 'Tom',
age: 18,
sayHi: function() {
console.log('Hi, my name is ' + this.name);
}
};

我們可以使用對象字面量的方式創(chuàng)建一個包含name、age、sayHi三個屬性的對象,其中sayHi是一個方法。但是我們想要給所有人都添加一個sayHello的方法,難道要在每個人的對象中都添加一個sayHello方法嗎?這時候就需要用到原型了。

JavaScript中的每個函數(shù)都有一個prototype屬性,這個屬性指向一個對象,即該函數(shù)的原型對象。比如我們定義一個Person函數(shù):

function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};

通過構(gòu)造函數(shù)創(chuàng)建對象時,會自動關(guān)聯(lián)構(gòu)造函數(shù)的原型對象作為對象的原型。比如我們使用Person函數(shù)創(chuàng)建一個tom對象:

let tom = new Person('Tom', 18);

此時tom對象的原型指向Person函數(shù)的原型對象,即tom.__proto__ === Person.prototype。我們可以通過tom對象來調(diào)用sayHello方法:

tom.sayHello(); // Hello, my name is Tom

這就是原型鏈的作用,tom對象以上沒有找到sayHello方法,就會繼續(xù)往上查找原型鏈,找到Person函數(shù)的原型對象,從而調(diào)用sayHello方法。

在JavaScript中,如果我們想要判斷一個對象是否是另一個對象的實例,可以使用instanceof關(guān)鍵字。比如判斷tom對象是否是Person函數(shù)的實例:

console.log(tom instanceof Person); // true

因為tom對象的原型指向Person函數(shù)的原型對象,因此它是Person函數(shù)的一個實例。

除了用字面量和構(gòu)造函數(shù)的方式創(chuàng)建對象以外,還可以使用Object.create方法來創(chuàng)建對象。Object.create方法接收一個原型對象,并返回一個新的對象,其原型指向該原型對象。

let student = Object.create(person);
student.major = 'Computer Science';

上面的代碼創(chuàng)建了一個student對象,其原型指向person對象,同時還附加了一個major屬性。因為student對象的原型指向person對象,因此也可以使用person對象中的屬性和方法。

JavaScript中的對象和原型鏈?zhǔn)欠浅V匾母拍睿瑢τ诶斫釰avaScript的面向?qū)ο缶幊谭浅S袔椭H绻胍钊肓私鈱ο蠛驮偷南嚓P(guān)內(nèi)容,建議閱讀相關(guān)的JavaScript教程書籍。