数码资讯
基于Javascript的原型链(原型链)的详细解决方案实现继承机制
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
如果前一个示例中的类以原型方式重新定义,则它们将被转换成以下形式:
复制代码代码如下所示:
函数的ClassA(){
}
classa.prototype.color =蓝色;
(classa.prototype.saycolor =功能){
警戒(这个颜色);
};
函数的ClassB(){
}
classb.prototype =新ClassA();
原型的魔法是最后一行的代码。在这里,B的原型属性设置为类的一个实例。这很有趣,因为你想要的类的所有属性和方法,但不想增加他们的B一原型之一。有没有更好的方法给一个原型属性比ClassA的实例吗
注:ClassA的构造函数被调用,它不传递参数给它。这是在原型链的标准做法。确保构造函数没有参数。
与对象伪装类似,子类的所有属性和方法都必须在原型属性被赋值之后出现,因为在它之前分配的所有方法都将被删除。为什么因为原型是一个新的对象所取代,原来的对象已被添加到新的方法将被破坏。所以,添加属性的B类和sayname代码()方法如下:
复制代码代码如下所示:
函数的ClassB(){
}
classb.prototype =新ClassA();
= B。原型名称;
(classb.prototype.sayname =功能){
警报(这个名字);
};
代码的这一部分可以通过运行以下示例来测试:
复制代码代码如下所示:
无功obja =新ClassA();
无功objb =新的B();
obja.color =蓝色;
objb.color =红色;
objb.name =约翰;
ObjA.sayColor();
ObjB.sayColor();
ObjB.sayName();
此外,在原型链的instanceof运算符的操作也是独一无二的。对于B的所有实例,实例返回ClassA和乙级。例如:
复制代码代码如下所示:
无功objb =新的B();
警报(objb instanceof ClassA); / /输出真
警报(objb是乙级); / /输出真
这是弱类型的世界用一个非常有用的工具,但它是不可能使用这种方法来判断一个对象时,是冒充的。但由于子类的原型是直接分配,情况如下:
复制代码代码如下所示:
console.log(objb。__proto__ = = = objb。构造函数。原型) / /假
由于对B的原型链的原型属性是由另一个类的对象重写。输出结果表明,objb。__proto__仍然指向ClassB.prototype,不objb.constructor.prototype.it也很好理解,作业person.prototype是一个新的(A)的直接对象的实例,使用对象构造函数的直接对象定义(构造函数)的构造函数是对象的根,Object.prototype是一个空的对象{ } { },性质和范围的classb.prototype。
复制代码代码如下所示:
函数的ClassA(){
}
classa.prototype.color =蓝色;
(classa.prototype.saycolor =功能){
警戒(这个颜色);
};
函数的ClassB(){
}
classb.prototype =新ClassA();
原型的魔法是最后一行的代码。在这里,B的原型属性设置为类的一个实例。这很有趣,因为你想要的类的所有属性和方法,但不想增加他们的B一原型之一。有没有更好的方法给一个原型属性比ClassA的实例吗
注:ClassA的构造函数被调用,它不传递参数给它。这是在原型链的标准做法。确保构造函数没有参数。
与对象伪装类似,子类的所有属性和方法都必须在原型属性被赋值之后出现,因为在它之前分配的所有方法都将被删除。为什么因为原型是一个新的对象所取代,原来的对象已被添加到新的方法将被破坏。所以,添加属性的B类和sayname代码()方法如下:
复制代码代码如下所示:
函数的ClassB(){
}
classb.prototype =新ClassA();
= B。原型名称;
(classb.prototype.sayname =功能){
警报(这个名字);
};
代码的这一部分可以通过运行以下示例来测试:
复制代码代码如下所示:
无功obja =新ClassA();
无功objb =新的B();
obja.color =蓝色;
objb.color =红色;
objb.name =约翰;
ObjA.sayColor();
ObjB.sayColor();
ObjB.sayName();
此外,在原型链的instanceof运算符的操作也是独一无二的。对于B的所有实例,实例返回ClassA和乙级。例如:
复制代码代码如下所示:
无功objb =新的B();
警报(objb instanceof ClassA); / /输出真
警报(objb是乙级); / /输出真
这是弱类型的世界用一个非常有用的工具,但它是不可能使用这种方法来判断一个对象时,是冒充的。但由于子类的原型是直接分配,情况如下:
复制代码代码如下所示:
console.log(objb。__proto__ = = = objb。构造函数。原型) / /假
由于对B的原型链的原型属性是由另一个类的对象重写。输出结果表明,objb。__proto__仍然指向ClassB.prototype,不objb.constructor.prototype.it也很好理解,作业person.prototype是一个新的(A)的直接对象的实例,使用对象构造函数的直接对象定义(构造函数)的构造函数是对象的根,Object.prototype是一个空的对象{ } { },性质和范围的classb.prototype。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。