用户定义对象的原型是做什么的?

时间:2010-12-28 21:08:41

标签: javascript

// Create an object type UserException  
function UserException (message){  
  this.message=message;  
  this.name="UserException";  
}  

// Make the exception convert to a pretty string when used as  
// a string (e.g. by the error console)  
UserException.prototype.toString = function (){  
  return this.name + ': "' + this.message + '"';  
}  

我不明白为什么你需要这里的UserException.prototype

3 个答案:

答案 0 :(得分:3)

每个“UserException”对象都会以这种方式自动共享“toString”函数。你可以在构造函数中分配该函数:

function UserException(message) {
  // whatever
  this.toString = function() { /* ... */ };
}

但是现在每个实例化也会为“toString”实例化一个新的不同的函数对象。

答案 1 :(得分:1)

prototype适用于通过new运算符创建的对象,如下所示:

var user_exception = new UserException("Error");

因此,现在可以在prototype对象上访问存储在user_exception中的所有属性和方法:

alert(user_exception); //alerts UserException: Error

在以下声明中:

throw new UserException("Value too high!");

1)它构造一个新的UserException对象,传递“Value too high!”串

2)新对象被移交给throw,期望一个对象定义了.toString()方法,然后输出到控制台的error日志。 / p>

答案 2 :(得分:1)

这取决于您是否使用UserException作为单身人士。

当您使用.prototype时,var foo = new UserException的每个实例都有自己的this.toString副本,该副本将作用于该对象。

您通常不在构造函数中分配函数,因为每个实例都将获得在内存中为其创建的函数的副本。将其原型化为实际的对象定义将其保存在每个对象引用的一个点(afaik)中。