类的继承在JavaScript中

类的继承在JavaScript中

问题描述:

方法我是新来的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

看起来你的代码来自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

这不是你如何定义一个方法。这样做:

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

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(){...};