数码资讯
javascript面向对象继承方法的经典实现
Javascript的出现已经有将近20年的历史了,但是预测的判断和公众的观点是不同的,很多人说Javascript不能面向语言,但是Javascript的类型非常松散,没有编译器,这给程序员很大的自由和一些缺陷。 虽然Javascript不是面向对象语言,但是我们可以用其他语言来实现面向对象编程来
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
Javascript的出现已经有将近20年的历史了,但是预测的判断和公众的观点是不同的,很多人说Javascript不能面向语言,但是Javascript的类型非常松散,没有编译器,这给程序员很大的自由和一些缺陷。
虽然Javascript不是面向对象语言,但是我们可以用其他语言来实现面向对象编程来实现面向Javascript的编程。
下面是Javascript教程中非常经典的继承方法。
复制代码代码如下所示:
定义一个宠物对象,通过这个名字和腿数。
函数(名称,腿){
this.name = / /保存的名字;这个名字和腿值。
this.legs =腿;
};
创建一个显示宠物名称和腿数的方法。
(pet.prototype.getdetails =功能){
返回this.name + + this.legs + 腿;
}
定义从宠物继承的猫对象。
var =函数(名称){
pet.call(这名字,4); / /调用父类的构造方法
};
从宠物继承的该行执行。
cat.prototype =新的宠物();
添加猫的动作方法
(cat.prototype.action =功能){
返回捉鸟;
};
/ /创建一个petcat猫的实例。
无功petcat =新的猫(费利克斯);
VaR的细节= petcat.getdetails();
console.log(细节)/ Felix有4条腿。
VaR的行动= petcat.action();
console.log(行动) / 抓鸟。
petcat.name = Sylvester ; / /改变petcat名称
petcat.legs = 7; / / petcat腿数的变化
细节= petcat.getdetails();
console.log(细节)/西尔维斯特有7条腿。
虽然上面的方法是不是一个大问题,代码的整体风格略显臃肿,很不雅观。在外面,你可以修改属性。此方法不保护继承的属性。下面的方法,新的原型即是省略,是使用功能的遗传特性。
复制代码代码如下所示:
定义一个宠物对象,通过这个名字和腿数。
函数(名称,腿){
创建一个该对象,可以更改名称,但不能改变腿部的数目,实现变量私有化。
var = {
姓名,
getdetails:函数(){
返回that.name + +腿+ 腿;
}
};
返回;
}
定义从宠物继承的猫对象。
var =函数(名称){
var =宠物(名称,4);从宠物继承属性
在猫中添加动作的一种方法。
that.action =函数(){
返回捉鸟;
}
返回;
}
/ /创建一个petcat2;
无功petcat2 =猫(费利克斯);
VaR的细节= petcat2.getdetails();
console.log(细节)/ Felix有4条腿。
VaR的行动= petcat2.action();
console.log(行动) / 抓鸟。
petcat2.name = Sylvester ; / /我们可以更改名称。
petcat2.legs = 7; / /但不能改变腿的数量
细节= petcat2.getdetails();
console.log(细节)/西尔维斯特有4条腿。
温馨提示:使用原型继承的优点是效率高的记忆,无论多少次,它是遗传的,对象的原型属性和方法保存的只有一次。当函数是遗传的,每一个新的实例创建重复的属性和方法。如果大量的对象,内存消耗会是伟大的。解决的办法是在一个对象保存一个较大的属性或方法作为一个参数的构造函数通过。这样,所有的实例将使用对象资源而不是创造了他们自己的版本。
以上两种方法都很容易实现javascript面向对象的继承,没有一种方法是绝对好的,没有一种方法是绝对不好的,这取决于个人的喜好,这两种方法并不是唯一的。
虽然Javascript不是面向对象语言,但是我们可以用其他语言来实现面向对象编程来实现面向Javascript的编程。
下面是Javascript教程中非常经典的继承方法。
复制代码代码如下所示:
定义一个宠物对象,通过这个名字和腿数。
函数(名称,腿){
this.name = / /保存的名字;这个名字和腿值。
this.legs =腿;
};
创建一个显示宠物名称和腿数的方法。
(pet.prototype.getdetails =功能){
返回this.name + + this.legs + 腿;
}
定义从宠物继承的猫对象。
var =函数(名称){
pet.call(这名字,4); / /调用父类的构造方法
};
从宠物继承的该行执行。
cat.prototype =新的宠物();
添加猫的动作方法
(cat.prototype.action =功能){
返回捉鸟;
};
/ /创建一个petcat猫的实例。
无功petcat =新的猫(费利克斯);
VaR的细节= petcat.getdetails();
console.log(细节)/ Felix有4条腿。
VaR的行动= petcat.action();
console.log(行动) / 抓鸟。
petcat.name = Sylvester ; / /改变petcat名称
petcat.legs = 7; / / petcat腿数的变化
细节= petcat.getdetails();
console.log(细节)/西尔维斯特有7条腿。
虽然上面的方法是不是一个大问题,代码的整体风格略显臃肿,很不雅观。在外面,你可以修改属性。此方法不保护继承的属性。下面的方法,新的原型即是省略,是使用功能的遗传特性。
复制代码代码如下所示:
定义一个宠物对象,通过这个名字和腿数。
函数(名称,腿){
创建一个该对象,可以更改名称,但不能改变腿部的数目,实现变量私有化。
var = {
姓名,
getdetails:函数(){
返回that.name + +腿+ 腿;
}
};
返回;
}
定义从宠物继承的猫对象。
var =函数(名称){
var =宠物(名称,4);从宠物继承属性
在猫中添加动作的一种方法。
that.action =函数(){
返回捉鸟;
}
返回;
}
/ /创建一个petcat2;
无功petcat2 =猫(费利克斯);
VaR的细节= petcat2.getdetails();
console.log(细节)/ Felix有4条腿。
VaR的行动= petcat2.action();
console.log(行动) / 抓鸟。
petcat2.name = Sylvester ; / /我们可以更改名称。
petcat2.legs = 7; / /但不能改变腿的数量
细节= petcat2.getdetails();
console.log(细节)/西尔维斯特有4条腿。
温馨提示:使用原型继承的优点是效率高的记忆,无论多少次,它是遗传的,对象的原型属性和方法保存的只有一次。当函数是遗传的,每一个新的实例创建重复的属性和方法。如果大量的对象,内存消耗会是伟大的。解决的办法是在一个对象保存一个较大的属性或方法作为一个参数的构造函数通过。这样,所有的实例将使用对象资源而不是创造了他们自己的版本。
以上两种方法都很容易实现javascript面向对象的继承,没有一种方法是绝对好的,没有一种方法是绝对不好的,这取决于个人的喜好,这两种方法并不是唯一的。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。