在另一个中调用一个对象的方法

时间:2016-08-07 11:33:32

标签: javascript class methods prototype

我有一个原型:

var myClass = function() {};

我在该课上有一个方法:

myClass.prototype.method1() = function() {
   return x;
}

然后我有第二种方法,我以相同的方式声明,但我想在其中访问method1()的结果。但这不起作用,我不确定为什么......

myClass.prototype.method2() = function() {
   return myClass.method1();
}

我得 TypeError:myClass.method1不是函数

任何人都可以指出这在语法上/概念上有什么不对吗?并建议任何改进?

此外,我不是100%我在这个例子中正确使用术语'class'和'prototype'。如果任何人都可以纠正这个术语,或者指出与这种过程相关的任何其他术语,我会很感激!

提前致谢。

3 个答案:

答案 0 :(得分:1)

var myClass = function() {};

这是一个构造函数而不是原型。这是一个解释差异的quick read

您可以使用this来呼叫它。这是刷新的best place

const MyClass = function() {};

MyClass.prototype.method1 = function() {
   return x;
}

MyClass.prototype.method2 = function() {
   return this.method1(); 
}

此外,method1method2

的功能定义中不需要括号

答案 1 :(得分:0)

因为(使用粗略的OO术语),method1()实例方法,并且您尝试将其称为 static < / em>方法。

const MyClass = function() {}; // MyClass is a constructor

MyClass.prototype.method1() = function() {
   return x;
}

MyClass.prototype.method2() = function() {
   return this.method1(); // Call it as an instance
}

或者,或者:

const MyClass = function() {};

MyClass.method1() = function() { // "static" method
   return x;
}

MyClass.prototype.method2() = function() {
   return MyClass.method1(); // Call it as a "static"
}

值得注意的是,这个术语具有误导性,没有静态或实例方法(实际上,JavaScript中没有方法,只有函数和属性可以保存对函数的引用)。

答案 2 :(得分:0)

JS oop在公共方法和特权方法之间存在一些差异。

MyClass.method1()是一种静态方法调用。它就像一个普通函数,与任何myClass对象实例都没有关系。

所以你需要使用Full命名空间来调用它:

count