示例:
var A = function (z) {
this.z = z
}
// attach 1 method
A.prototype.sayHay = function(message) {
this.message = message
console.log(message)
}
// attach 2 methods ?????
A.prototype.sayHay.protorype.inReverse = function () {
// how to avoid the first console.log
console.log(this.message.split('').reverse().join(''))
}
var b = new A()
b.sayHay('Hola').inReverse()
// this should prints 'aloH'
我怎么能覆盖第一个console.log,因为sayHay打印'Hi'并返回inReverse'iH'
E D I T E D - - - - - - - - - - - - - - - - - - - - - - - - - - -
我怎么办,只执行sayHay('Hola')我返回'Hello'并执行sayHay('Hello')。inReverse()返回'aloH'?
答案 0 :(得分:1)
var A = function (z) {
this.z = z
}
// attach 1 method
A.prototype.sayHay = function(message) {
this.message = message;
return {
log : function(){console.log(message)},
rev : function () { console.log(this.message.split('').reverse().join(''))}
};
}
var b = new A();
b.sayHay('Hola').rev();
// this should prints 'aloH'
我试图以封闭的方式来做。检查您是否对通过原型和闭合组合实现目标感到满意。
答案 1 :(得分:0)
原型用于使用关键字new
创建对象的情况。
例如:
new A().sayHay(...).[Any method from the prototype]
因此,您可以初始化变量b
,然后执行函数sayHay
作为构造函数:
new b.sayHay('Hola').inReverse();
var A = function (z) {
this.z = z
}
// attach 1 method
A.prototype.sayHay = function(message) {
this.message = message
//console.log(message);
}
A.prototype.sayHay.prototype.inReverse = function () {
// how to avoid the first console.log
console.log(this.message.split('').reverse().join(''))
}
var b = new A();
new b.sayHay('Hola').inReverse();

要避免第一个console.log(message)
,您可以在运行时替换该函数,或删除该行。
另一种选择是避免第二次原型设计并返回一个对象:
var A = function (z) {
this.z = z
}
// attach 1 method
A.prototype.sayHay = function(message) {
return {
message: message,
inReverse: function() {
console.log(this.message.split('').reverse().join(''));
}
}
}
var b = new A();
b.sayHay('Hola').inReverse();

答案 2 :(得分:0)
这是使用常规类的另一种方式
class Sayer {
constructor (message) {
this.message = message
}
inReverse() {
return this.message.split('').reverse().join('')
}
toString() {
return this.message
}
}
class A {
sayHay(message) {
return new Sayer(message)
}
}
console.log(new A().sayHay('Hola').inReverse())
console.log(new A().sayHay('Hola').toString())