JavaScript继承:在构造函数中使用uu proto_u,而不是构造函数';s原型属性

JavaScript继承:在构造函数中使用uu proto_u,而不是构造函数';s原型属性,javascript,oop,inheritance,prototype,Javascript,Oop,Inheritance,Prototype,我和一位同事讨论了Javascript OO策略/模式,从我读过的大多数教程中,在两个构造函数(带参数)之间建立原型/继承关系的常用方法是将原型分配给子函数 e、 g: 这里的一个问题是,参数的顺序可能不同,或者更改名称等,而上面的示例确实需要两(2)条单独的语句来建立关系(apply()语句和.prototype statemetn) 我的同事建议采用这种方法: var MyParentClass = function(arg1) { ... }; var MyChildClass = fu

我和一位同事讨论了Javascript OO策略/模式,从我读过的大多数教程中,在两个构造函数(带参数)之间建立原型/继承关系的常用方法是将原型分配给子函数

e、 g:

这里的一个问题是,参数的顺序可能不同,或者更改名称等,而上面的示例确实需要两(2)条单独的语句来建立关系(apply()语句和.prototype statemetn)

我的同事建议采用这种方法:

var MyParentClass = function(arg1) { ... };

var MyChildClass = function(arg1, arg2) {
    this.__proto__ = new MyParentClass(arg2);
    ...
};
这种方法较短,并为将参数传递给父构造函数提供了更大的灵活性


除非我遗漏了什么,否则这似乎应该是在JavaScript类之间建立继承的事实模式,所以我很好奇为什么到目前为止我在所有JavaScript OO教程中都没有遇到过这种模式。有人能告诉我上述策略是否有缺点吗?

您可以通过向父构造函数传递参数来解决问题-函数如下:

而不是

MyChildClass.prototype = new MyParentClass;
你可以写

MyChildClass.prototype = Object.create(MyParentClass.protoype)
通过这种方式,您可以分配原型,而无需MyParentClass的新实例化

如果要将constructorFunction中的参数从MyChildClass传递到MyParentClass,可以这样做:

function MyChildClass(arg1) {
    MyParentClass.call(this, arg1);
}

您可以通过将参数传递给父构造函数来解决此问题,如下所示:

而不是

MyChildClass.prototype = new MyParentClass;
你可以写

MyChildClass.prototype = Object.create(MyParentClass.protoype)
通过这种方式,您可以分配原型,而无需MyParentClass的新实例化

如果要将constructorFunction中的参数从MyChildClass传递到MyParentClass,可以这样做:

function MyChildClass(arg1) {
    MyParentClass.call(this, arg1);
}

您可以通过将参数传递给父构造函数来解决此问题,如下所示:

而不是

MyChildClass.prototype = new MyParentClass;
你可以写

MyChildClass.prototype = Object.create(MyParentClass.protoype)
通过这种方式,您可以分配原型,而无需MyParentClass的新实例化

如果要将constructorFunction中的参数从MyChildClass传递到MyParentClass,可以这样做:

function MyChildClass(arg1) {
    MyParentClass.call(this, arg1);
}

您可以通过将参数传递给父构造函数来解决此问题,如下所示:

而不是

MyChildClass.prototype = new MyParentClass;
你可以写

MyChildClass.prototype = Object.create(MyParentClass.protoype)
通过这种方式,您可以分配原型,而无需MyParentClass的新实例化

如果要将constructorFunction中的参数从MyChildClass传递到MyParentClass,可以这样做:

function MyChildClass(arg1) {
    MyParentClass.call(this, arg1);
}


因为
\uuuuu proto\uuuuuuu
是非标准的,不推荐使用,也因为您在每个实例上分别设置了
\uuuuu proto\uuuuuuu
,所以
实例1.\uuuu proto\uuuuuuu!==实例2.\uuuu proto\uuuu
@jamesalardice在这种情况下,这是期望的行为如果我是正确的,我们不希望两个实例指向同一个原型实例。例如,如果父对象是Person,子对象是Employee,那么我们希望每个Employee的原型对象也是一个单独的Person实例。然而,我误解了什么吗?原型为相同域的对象定义了可重用的beahavior。因此,如果同一原型(域)的实例不共享同一原型,我会感到困惑。例如:JS中的所有对象都是Object.prototype的子对象,并且它们都共享同一个prototype Object.prototype。因为
\uuuuuuuuuuuuuuu
是非标准的,已弃用,不应使用。另外,因为您在每个实例上分别设置了
\uuuuu proto\uuuu
,因此
实例1.\uuuu proto\uuu!==实例2.\uuuu proto\uuuu
@jamesalardice在这种情况下,这是期望的行为如果我是正确的,我们不希望两个实例指向同一个原型实例。例如,如果父对象是Person,子对象是Employee,那么我们希望每个Employee的原型对象也是一个单独的Person实例。然而,我误解了什么吗?原型为相同域的对象定义了可重用的beahavior。因此,如果同一原型(域)的实例不共享同一原型,我会感到困惑。例如:JS中的所有对象都是Object.prototype的子对象,并且它们都共享同一个prototype Object.prototype。因为
\uuuuuuuuuuuuuuu
是非标准的,已弃用,不应使用。另外,因为您在每个实例上分别设置了
\uuuuu proto\uuuu
,因此
实例1.\uuuu proto\uuu!==实例2.\uuuu proto\uuuu
@jamesalardice在这种情况下,这是期望的行为如果我是正确的,我们不希望两个实例指向同一个原型实例。例如,如果父对象是Person,子对象是Employee,那么我们希望每个Employee的原型对象也是一个单独的Person实例。然而,我误解了什么吗?原型为相同域的对象定义了可重用的beahavior。因此,如果同一原型(域)的实例不共享同一原型,我会感到困惑。例如:JS中的所有对象都是Object.prototype的子对象,并且它们都共享同一个prototype Object.prototype。因为
\uuuuuuuuuuuuuuu
是非标准的,已弃用,不应使用。另外,因为您在每个实例上分别设置了
\uuuuu proto\uuuu
,因此
实例1.\uuuu proto\uuu!==实例2.\uuuu proto\uuuu
@jamesalardice在这种情况下,这是期望的行为如果我是正确的,我们不希望两个实例指向同一个原型实例。例如,如果父对象是Person,子对象是Employee,那么我们希望每个Employee的原型对象也是一个单独的Person实例。然而,我误解了什么吗?原型为相同域的对象定义了可重用的beahavior。因此,如果同一原型(域)的实例不共享同一原型,我会感到困惑。例如:JS中的所有对象都是Object.prototype的子对象,它们都共享同一个prototype Object.prototype。