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

javascript 繼承的幾種方式

Javascript是一種基于對(duì)象的編程語(yǔ)言,其特點(diǎn)是函數(shù)對(duì)象的概念、閉包的支持和原型對(duì)象的模式。當(dāng)我們需要對(duì)Javascript中的對(duì)象進(jìn)行繼承時(shí),有多種方式可供選擇。本文將介紹其中比較常用的幾種方式。 一、原型鏈繼承 原型鏈繼承是Javascript中最常見的繼承方式之一。這種繼承方式是通過繼承父類的原型對(duì)象來實(shí)現(xiàn)的。舉個(gè)例子,如下代碼所示:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
};
function Student(name, age, grade) {
this.grade = grade;
}
Student.prototype = new Person();
var s = new Student("Tom", 20, "A");
s.sayHello();
在這段代碼中,我們新建了Person和Student兩個(gè)構(gòu)造函數(shù),Student通過繼承Person的原型對(duì)象來實(shí)現(xiàn)繼承。在新建Student實(shí)例時(shí),它的原型對(duì)象將指向Person的原型對(duì)象。 二、構(gòu)造函數(shù)繼承 構(gòu)造函數(shù)繼承是通過在子類構(gòu)造函數(shù)內(nèi)調(diào)用父類構(gòu)造函數(shù)來實(shí)現(xiàn)的。舉個(gè)例子,如下代碼所示:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
};
function Student(name, age, grade) {
Person.call(this, name, age);
this.grade = grade;
}
var s = new Student("Tom", 20, "A");
s.sayHello();
在這段代碼中,我們通過在Student構(gòu)造函數(shù)內(nèi)部調(diào)用Person構(gòu)造函數(shù)并傳遞相應(yīng)參數(shù)來實(shí)現(xiàn)繼承。這種繼承方式可以避免原型對(duì)象共享的問題,但是無(wú)法繼承父類原型對(duì)象上的方法和屬性。 三、組合繼承 組合繼承是將原型鏈繼承和構(gòu)造函數(shù)繼承相結(jié)合來實(shí)現(xiàn)的。通過調(diào)用父類構(gòu)造函數(shù)來繼承父類屬性,同時(shí)又通過將子類的原型對(duì)象指向父類的實(shí)例來繼承父類的原型對(duì)象上的屬性和方法。舉個(gè)例子,如下代碼所示:
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
};
function Student(name, age, grade) {
Person.call(this, name, age);
this.grade = grade;
}
Student.prototype = new Person();
Student.prototype.constructor = Student;
var s = new Student("Tom", 20, "A");
s.sayHello();
在這段代碼中,我們使用了原型鏈繼承和構(gòu)造函數(shù)繼承來實(shí)現(xiàn)繼承。通過調(diào)用Person構(gòu)造函數(shù)來繼承父類的屬性,同時(shí)又通過將子類的原型對(duì)象指向父類的實(shí)例來繼承父類的原型對(duì)象上的屬性和方法。這種繼承方式既可以繼承父類屬性,也可以繼承父類方法,但是存在一個(gè)問題就是會(huì)調(diào)用兩次父類構(gòu)造函數(shù)。 四、原型式繼承 原型式繼承是一種實(shí)現(xiàn)繼承的高效方式。這種繼承方式是通過一個(gè)空對(duì)象作為中介,來克隆父對(duì)象的原型對(duì)象的方式來實(shí)現(xiàn)繼承。舉個(gè)例子,如下代碼所示:
var father = {
name: "Tom",
age: 40,
sayHello: function() {
console.log("Hello, my name is " + this.name);
}
};
var son = Object.create(father);
console.log(son.name);
son.sayHello();
在這段代碼中,我們使用Object.create()方法通過指定空對(duì)象father來克隆father的原型對(duì)象來實(shí)現(xiàn)繼承。 五、寄生式繼承 寄生式繼承是基于原型式繼承的方式來實(shí)現(xiàn)的。這種繼承方式是在原型式繼承的基礎(chǔ)上,使用一個(gè)函數(shù)來返回一個(gè)新對(duì)象,并在該新對(duì)象上面附加屬性和方法來實(shí)現(xiàn)繼承。舉個(gè)例子,如下代碼所示:
function createStudent(father) {
var obj = Object.create(father);
obj.grade = "A";
return obj;
}
var father = {
name: "Tom",
age: 40,
sayHello: function() {
console.log("Hello, my name is " + this.name);
}
};
var son = createStudent(father);
console.log(son.name);
son.sayHello();
在這段代碼中,我們使用了一個(gè)函數(shù)createStudent來返回一個(gè)繼承自father的新對(duì)象,并且在新對(duì)象上添加了屬性grade。 總結(jié): 以上就是常見的幾種Javascript繼承方式。原型鏈繼承、構(gòu)造函數(shù)繼承、組合繼承、原型式繼承和寄生式繼承各自的特點(diǎn)和優(yōu)缺點(diǎn)不同,我們需要在具體問題上根據(jù)應(yīng)用場(chǎng)景來選擇相應(yīng)的繼承方式。