我有这个Javascript类,想要添加某种功能(比如原型) 到这个类的属性。
function theUploader(virtualField)
{
var self = this;
//self.v = virtualField;
self.v = (function(){return self.v; this.clear = function(){self.v = '';}})()
self.v.prototype = function clear() {
self.v = '';
}
}
我试过那些台词。
我无法找到定义这样一个东西的正确方法。我想这样称呼它
var temp = new theUploader('smart');
temp.v.clear();
有人用jsaon指导我,但仍在努力
答案 0 :(得分:0)
self.v.prototype = function clear() {
self.v = '';
}
应该是
self.v.clear = function() {
self.v = '';
}
答案 1 :(得分:0)
这一行的问题:
self.v = (function(){return self.v; this.clear = function(){self.v = '';}})()
如果你将它分成几行,......会更明显:
self.v = (function(){
return self.v;
this.clear = function(){
self.v = '';
}
})()
它是一个立即调用的函数表达式,它在第一行返回,因此它永远不会到达this.clear = ...
行。返回的值self.v
此时将为undefined
,这意味着您为该值分配的self.v
属性也将为undefined
,这意味着此行:
self.v.prototype = function clear() {
...您将收到错误TypeError: Cannot set property 'prototype' of undefined
。
鉴于您theUploader()
函数中的混淆,确切地说出您要尝试做什么有点难,但鉴于您说您希望能够执行此操作:
var temp = new theUploader('smart');
temp.v.clear();
然后你需要创建一个.v
属性,它本身就是一个具有.clear()
方法的对象,所以:
function theUploader(virtualField)
{
var self = this;
self.v = {}; // create a v property that is an object
self.v.clear = function(){self.v = '';}; // add a method to v
}
......会这样做的。或者您可以直接在对象文字中定义clear
函数:
self.v = {
clear : function(){self.v = '';}
};
(无论哪种方式,对我来说,调用self.v.clear()
实际上会用空字符串覆盖.v
属性并不合理,但如果这就是你想要的,那你就是这样做的。)