Javascript 如何调用构造函数的基方法';与类中的方法同名的原型?
鉴于我已:Javascript 如何调用构造函数的基方法';与类中的方法同名的原型?,javascript,Javascript,鉴于我已: var PersonClass = function () { function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; this.name = function(){ return this.firstName + " " + this.lastName; }
var PersonClass = function () {
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.name = function(){
return this.firstName + " " + this.lastName;
};
this.setName = function(a,b){
this.firstName = a;
this.lastName = b;
return this.firstName + " " + this.lastName;
}
}
Person.prototype.name = function () {
return "Proto_:"+this.firstName + " " + this.lastName;
};
Person.prototype.whoAreYou = function () {
return "Hi i'm " + this.name();
};
Person.prototype.setName2 = function(a,b){
this.firstName = a;
this.lastName = b;
};
return Person;
}(); //PersonClass
我创建了一个实例:
Me=新人班(“Steve”、“Benj”);
me.name()//返回Steve Benj。
什么将调用prototype name方法并返回Proto:Steve Benj?按照您构建它的方式,您在定义后立即调用了
PersonClass
函数
所以PersonClass==Person
所以当你做Me=newpersonclass(“史蒂夫”、“本杰”)代码>,你真正做的是Me=newperson('Steve','Benj')代码>
因此,无论何时调用这些原型方法,都是从Person
调用原型方法
您可以通过执行以下操作来验证这一点
Me.constructor // => Person
对象与其原型之间的关系是通过构造函数
属性实现的
在您的例子中,constructor
是Person
函数对象
人
与其原型
直接耦合
最后一件事是在某个对象上调用原型方法以正确绑定这个关键字-这可以通过以下方法实现:
console.log(Me.constructor.prototype.name.call(Me));
输出将是:
Proto_:Steve Benj
另一种方法是使用相同结果的函数:
Object.getPrototypeOf(Me).name.call(Me)
Person构造函数中定义的函数将覆盖/覆盖它下面的原型定义,因此没有好的方法在构造函数中定义的函数上调用原型函数(关于“坏”的方法,请参阅文章中的注释)
我会考虑是否要为这两个函数使用相同的名称,除非这不是您的实际用例。我想说的是,您需要创建一个名为protoName或类似的原型函数,如果您需要不同的行为,您应该定义不同的函数。类似的问题。我认为您在本例中试图做的是不可能的,您可能需要尝试另一种方法。me.\uuu proto\uuuu.name()
返回proto字符串,但不应使用\uuuu proto\uuu
的可能重复不是与me.constructor.prototype.name()
相同吗?@ThomasAltmann,Me.constructor.prototype.name()。查看我关于.call()
的解释哦,很抱歉,我只是查看了输出的前几个字符,认为一切都是你的,谢谢“对象和它的原型之间的关系是通过构造函数
属性实现的:”我认为这是误导。每个对象都有一个引用对象原型的内部[[Prototype]]
属性。对象的构造函数的值不重要。例如,var foo={bar:42};var baz=Object.create(foo)代码><代码>对象。getPrototypeOf(baz)!=prototype
@FelixKling,我指的是“明显的”关系。我不想让OP使用\uuuuu proto\uuuuuu
(我们知道它不是标准的)