关于JS的函数化继承调用父类方法的实现,有点问题
发布于 9 年前 作者 JiahuiZhou 4049 次浏览 最后一次编辑是 8 年前 来自 问答

//给原型添加一个method方法 Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }

//用method方法来创建一个访问父类的方法 Object.method(‘superior’ , function(name){ var that = this, method = that[name]; return function() { return method.apply(that, arguments); }; });

//调用 var coolcat = function (spec) { var that = cat(spec), super_get_name = that.superior(‘get_name’);//这里报错 that.get_name = function (n) { return ‘like’ + super_get_name() + ’ baby’; }; return that; };

var myCoolcat = coolcat({name: ‘Bix’}); var name = myCoolcat.get_name();

按道理说没错吧。。我在看JS good parts 那本书的时候按书上敲的, 总是报一个undefined的错误。。apply的方法是原型自带的吧orz 1B0B951A-38C8-49E7-9C42-2D1426A5E75D.png

5 回复

关键是你的cat(spec)返回的是undefined嘛

@TimothyJin 我的cat是写了的啊 var cat = function (spec) { spec.saying = spec.saying || “meow”; var that = mammal(spec); that.purr = function (n) { var i, s = ‘’; for(i = 0; i < n; i += 1) { if (s) { s += ‘-’; } s += ‘r’;

	}
	return s;
};
that.get_name = function() {
	return that.says() + ' ' + spec.name + ' ' + that.says();
};

};

不知道这里面的this,是否真按照你设想工作了?

@qimenxiaozi 我知道你说的什么意思,this有时候会因为疏忽绑定在全局上,我检查过了,该用that替代的地方都用了

你的Cat函数返回值就是undefined

回到顶部