2014-10-10 125 views
0

方法我是新來的JavaScript應用程序development.When我來到的功能和所有我發現像類的繼承在JavaScript中

function Parenizor(value) { 
console.log(this.setValue()); 
} 

Parenizor.method('setValue', function() { 
console.log('am called'); 
}); 

Parenizor.method('getValue', function() { 
return 1; 
}); 

Parenizor.method('toString', function() { 
return 2; 
}); 

和代碼當我調用的函數一樣

var a = new Parenizor(1)

a.setValue()

這引發了我的錯誤一樣Undefined not a function ..Why是這樣的??。希望有人在這裏CA n找到我的錯誤..Thanz .. :)

+0

怎麼樣'Parenizor.prototype.setValue =函數(){代碼}'.. – orhanhenrik 2014-10-10 17:22:04

+0

@Izzey是的,我知道要通過原型調用..但我只是想通過.method()調用它..有可能就像我做的或是否有任何方式調用.method() – user3902466 2014-10-10 17:25:54

+0

請不要使用Crockford作爲參考古典繼承。他的代碼都沒有正確執行,他希望使用私有變量,因爲他擔心封裝,但是通過修改他不屬於它的對象(函數和對象原型)來制動它,也許這個答案可以幫助你:http://stackoverflow.com/問題/ 16063394/prototypical-inheritance-write-up/16063711#16063711 – HMR 2014-10-11 00:41:57

回答

1

看起來你的代碼來自Classical Inheritance in JavaScript,道格拉斯克羅克福德。

我猜你沒看過這部分:

爲了使上述工作的例子,我寫了四種sugar方法。首先, method方法,它將一個實例方法添加到類中。

Function.prototype.method = function (name, func) { 
    this.prototype[name] = func; 
    return this; 
}; 
+0

..是啊,我從CrickFord博客得到了這段代碼..我沒有得到你的意思是糖的方法..你可以通過示例提供工作 – user3902466 2014-10-10 17:27:45

+0

只需將代碼複製粘貼到你的javascript的頂部 – orhanhenrik 2014-10-10 17:29:16

+0

只需包括代碼在嘗試使用'Parenizor.method'之前。 – Oriol 2014-10-10 17:29:20

1

這不是你如何定義一個方法。這樣做:

function K() {} 

K.prototype.setValue = function() {}; 

K.prototype.getValue = function() {}; 
+0

更多解釋:http://stackoverflow.com/questions/6918509/this-method-function-vs-obj-prototype-method-function – sma 2014-10-10 17:22:02

+0

所以調用像Parenizor.method('方法')無效? – user3902466 2014-10-10 17:24:51

+0

@ user3902466不,它不是無效的語法。但默認情況下它不存在,您必須手動定義'Function.prototype.method'。 – Oriol 2014-10-10 17:28:17

0

JavaScript是面向對象的,不帶班,但與原型。 首先,當你聲明Parenizor時,你聲明瞭一個'構造函數'。 你probaly想這樣的:

function Parenizor(){ 
    var value = null; 

    this.setValue = function(val){ 
     value = val; 
    }; 

    this.getValue = function(){ 
     return value; 
    }; 

    this.toString = function(){ 
     return String(value); 
    }; 
} 

或也設置到對象原型:

function Parenizor(){} 
Parenizor.prototype._value = null; 
Parenizor.prototype.setValue = function(){...}; 
Parenizor.prototype.getValue = function(){...}; 
Parenizor.prototype.toString = function(){...};