// 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
。
答案 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)中。