原型方法不是函数,为什么?

Roy*_*Roy 0 javascript

(function(){
  test();
}());

function Class(){
  this.prop = 'hi';
}
Class.prototype.mod = function(num){this.prop = num;}

function test(){
  var c = new Class();
  c.mod('now'); // it'll say it's not a function
  alert(c.prop); // it's work
}
Run Code Online (Sandbox Code Playgroud)

我想将函数和类移出就绪函数以使代码清理并节省内存,但我发现类方法不起作用。

如果我将原型移动到测试功能,它会起作用,就像

(function(){
  test();
}());

function Class(){
  this.prop = 'hi';
}


function test(){
  Class.prototype.mod = function(num){this.prop = num;}
  var c = new Class();
  c.mod('now'); // it's ok
  alert(c.prop); 
}
Run Code Online (Sandbox Code Playgroud)

为什么我必须将原型方法移动到测试或就绪功能?

Nie*_*sol 5

因为您的.prototype.mod定义在调用它的函数之后。提升只对函数定义本身有帮助(这就是为什么new Class()工作正常),而不是原型定义。

这真的不应该那么难:首先准备你的工具,然后使用它们。