我是JS的新手,在这个主题上相当困惑。 现在我正在读一本书,它说: -
其中所有原型指向同一个对象并且父母获得子项的属性,就是使用中介来 打破链条。中介采用临时构造函数的形式。
创建一个空函数F()并将其原型设置为原型 父构造函数,允许您调用新的F()并创建没有的对象 他们自己的属性,但继承了父母原型的一切。
这是代码。
function Shape() {
}
// augment prototype
Shape.prototype.name = 'Shape';
Shape.prototype.toString = function () {
return this.name;
};
function TwoDShape() {
};
// take care of inheritance
// Creating a Temporary constructor Function
var F = function () {
};
// Then Setting its prototype to Parent's Prototype.
F.prototype = Shape.prototype;
// Allows to call a function
TwoDShape.prototype = new F();
//Settubg cobstryctir
TwoDShape.prototype.constructor = TwoDShape;
// augment prototype
TwoDShape.prototype.name = '2D shape';
function Triangle(side, height) {
this.side = side;
this.height = height;
}
var F = function() {
};
F.prototype = TwoDShape.prototype;
Triangle.prototype = new F();
Triangle.prototype.constructor = Triangle;
// augment prototype
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function () {
return this.side * this.height / 2;
};
var my = new Triangle(5, 10);
console.log(my.getArea());
现在我很困惑那条线
允许您调用新的F()并创建没有的对象 他们自己的属性,但继承了父母原型的一切。
Triangle.prototype = new F();
意味着当我们创建一个三角形obj时,它的原型指向新的对象吗? 然后
F.prototype = Shape.prototype;
这意味着f原型指向Shape原型..所以三角形的新对象间接使用形状原型。 但有什么用? 为什么这样做? 因为我是学习者,请耐心等待。感谢。