都0202年了,你还不知道javascript有几种继承方式?
2021-01-16 16:14
标签:利用 对象 实例化 java 阅读 例子 先来 print 类构造 现在要编写一个子类函数来继承这个父类,如下: 上面代码可以看到,子类Son是通过Parent.call的方式去调用父类构造函数,然后把this对象传进去,执行父类构造函数之后,子类Son就拥有了父类定义的color和print方法。 调用一下该方法,输出如下: 我们现在有一个基类Flower,它有一个属性colors,现在我们把某一个实例的colors值改一下: 我们有一个父类和一个空的子类; 接着我们把子函数的原型属性赋值给了父函数的实例; 寄生式继承本质上还是原型链继承,Object.create(obj);方法意思是以obj为原型构造对象,所以寄生式继承不需要构造函数,但是同样有着原型链继承的优缺点,也就是它把所有的属性和方法都共享了。 都0202年了,你还不知道javascript有几种继承方式? 标签:利用 对象 实例化 java 阅读 例子 先来 print 类构造 原文地址:https://www.cnblogs.com/oujiamin/p/12924625.html// 父类构造函数
function Parent(color) {
this.color = color;
this.print = function() {
console.log(this.color);
}
}
// 子类构造函数
function Son(color) {
Parent.call(this, color);
}
// 测试
var son1 = new Son(‘red‘);
son1.print(); // red
?
var son2 = new Son(‘blue‘);
son2.print(); // blue
function Flower() {
this.colors = [‘黄色‘, ‘红色‘];
this.print = function () {
console.log(this.colors)
}
}
?
function Rose() {
Flower.call(this);
}
?
var r1 = new Rose();
var r2 = new Rose();
?
console.log(r1.print()); // [ ‘黄色‘, ‘红色‘ ]
console.log(r2.print()); // [ ‘黄色‘, ‘红色‘ ]
r1.colors.push(‘紫色‘);
?
console.log(r1.print()); // [ ‘黄色‘, ‘红色‘, ‘紫色‘ ]
console.log(r2.print()); // [ ‘黄色‘, ‘红色‘ ]
function Parent() {
this.color = ‘red‘;
this.print = function() {
console.log(this.color);
}
}
function Son() {
}
Son.prototype = new Parent();
Son.prototype.constructor = Son;
var son1 = new Son();
son1.print(); // red
Son.prototype = new Parent();
Son.prototype.constructor = Son;
function Flower() {
this.colors = [‘黄色‘, ‘红色‘];
this.print = function () {
console.log(this.colors)
}
}
?
function Rose() {}
Rose.prototype = new Flower();
Rose.prototype.constructor = Rose;
?
var r1 = new Rose();
var r2 = new Rose();
?
console.log(r1.print()); // [ ‘黄色‘, ‘红色‘ ]
console.log(r1.print()); // [ ‘黄色‘, ‘红色‘ ]
?
r1.colors.push(‘紫色‘);
?
console.log(r1.print()); // [ ‘黄色‘, ‘红色‘, ‘紫色‘ ]
console.log(r2.print()); // [ ‘黄色‘, ‘红色‘, ‘紫色‘ ]
?function Parent(color) {
this.color = color;
}
Parent.prototype.print = function() {
console.log(this.color);
}
function Son(color) {
Parent.call(this, color);
}
Son.prototype = new Parent();
Son.prototype.constructor = Son;
?
var son1 = new Son(‘red‘);
son1.print(); // red
?
var son2 = new Son(‘blue‘);
son2.print(); // blue
var obj = {
color: ‘red‘,
print: function() {
console.log(this.color);
}
};
?
var son1 = Object.create(obj);
son1.print(); // red
?
var son2 = Object.create(obj);
son2.print(); // red
function Parent(color) {
this.color = color;
}
Parent.prototype.print = function() {
console.log(this.color);
}
function Son(color) {
Parent.call(this, color);
}
Son.prototype = Object.create(Parent.prototype);
Son.prototype.constructor = Son;
?
var son1 = new Son(‘red‘);
son1.print(); // red
?
var son2 = new Son(‘blue‘);
son2.print(); // blue
文章标题:都0202年了,你还不知道javascript有几种继承方式?
文章链接:http://soscw.com/index.php/essay/42788.html