Uncaught TypeError: this.rnd is not a function.
在这种情况下该怎么办? 我了解您需要以某种方式使用call方法?
var foo = function () {
var write = function () {
document.write(this.rnd([1, 3, 5, 7]));
}
write();
}
foo.prototype.rnd = function(array) {
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo();
答案 0 :(得分:3)
var foo = function(){
var write = function(ctx) {
document.write(ctx.rnd([1, 3, 5, 7]));
}
write(this);
}
foo.prototype.rnd = function(array)
{
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo()
答案 1 :(得分:2)
如果要以这种方式进行设置,则可以在实例上定义write
,以便可以用this.write()
进行调用。每个实例都有自己的函数副本,这通常是不必要的:
var foo = function(){
this.write = function() {
console.log(this.rnd([1, 3, 5, 7]));
}
this.write();
}
foo.prototype.rnd = function(array){
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo();
或者,您也可以将write()
放在原型上,然后所有实例将共享相同的功能:
var foo = function(){
this.write();
}
foo.prototype.write = function() {
console.log(this.rnd([1, 3, 5, 7]));
}
foo.prototype.rnd = function(array){
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo();
如果想要使用call()
,则可以这样操作,它将this
中的write()
手动绑定到实例:
var foo = function () {
var write = function () {
console.log(this.rnd([1, 3, 5, 7]));
}
write.call(this);
}
foo.prototype.rnd = function(array) {
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo();
答案 2 :(得分:2)
var foo = function(){
var currentThis = this
var write = function() {
document.write(currentThis.rnd([1, 3, 5, 7]));
}
write();
}
foo.prototype.rnd = function(array)
{
return array[Math.round(Math.random() * (array.length - 1))];
}
var f = new foo();
这里的问题是,到您写这篇文章的时候,这和foo构造函数的含义不一样。 当您学习香草javascript时,您可能会发现人们也在做
var self = this
var that = this