javascript从类名中分配函数

时间:2014-05-14 06:32:49

标签: javascript

我希望能够在javascript中从另一个类名中分配函数。这就是我在剧本中的意思:

classA = function() {

     this.direction = 1;
     this.someFunction = function() {
          this.direction = 0;
     }   

}

classB = function() {

    this.direction = 2;
    this.anotherFunction = classA.function

}

objA = new classA;
objB = new classB;
objB.anotherFunction();
console.log(objB.direction); // 0
console.log(objA.direction); // 1

我怎样才能实现这一目标?我找不到关于javascript的原型变量的很多信息,但我觉得这是可能的。

编辑:修正了一个拼写错误

4 个答案:

答案 0 :(得分:2)

以下列方式尝试:

var classA = function() {
     this.direction = 1;
     this.someFunction = function() {
         this.direction = 0;
     };
};

var classB = function() {
    this.direction = 2;
    this.anotherFunction = new classA().someFunction;
};

var objA = new classA;
var objB = new classB;
objB.anotherFunction();
console.log(objB.direction); // 0
console.log(objA.direction); // 1

答案 1 :(得分:1)

这是我认为正确的方法......

var classA = function() {
     this.direction = 1;
}

classA.prototype.someFunction = function() {
     this.direction = 0;
}   

var classB = function() {
    this.direction = 2;
}

classB.prototype.anotherFunction = classA.prototype.someFunction;

objA = new classA();
objB = new classB();
objB.anotherFunction();
console.log(objB.direction);
console.log(objA.direction);

答案 2 :(得分:1)

您可以使用prototype来定义功能:

var classA = function () {
    this.direction = 1;
}
classA.prototype.someFunction = function () {
    this.direction = 0;
}


var classB = function () {
    this.direction = 2;
}
classB.prototype.anotherFunction = classA.prototype.someFunction;

objA = new classA();
objB = new classB();
objB.anotherFunction();
console.log(objB.direction); // 0
console.log(objA.direction); // 1

答案 3 :(得分:0)

编辑:看起来所有答案都相似。

这是一个演示使用prototype对象的小提琴:http://jsfiddle.net/AZ757/

function ClassA(){
    this.direction = 1;
}

// Expose method
ClassA.prototype.someFunction = function(){
    this.direction = 0;   
}

function ClassB(){
    this.direction = 2;

    // Instance property
    this.anotherFunction = ClassA.prototype.someFunction;
}

// Instances
objA = new ClassA();
objB = new ClassB();

console.log(objB.direction); // Outputs 2
console.log(objA.direction); // Outputs 1

objB.anotherFunction(); // Sets to 0

console.log(objB.direction); // Outputs 0

objA.someFunction(); // Set to 0

console.log(objA.direction); // Outputs 0

正如Hamza在评论中指出的那样,我错误地将ClassA.prototype.someFunction分配给this.anotherFunction(复制/粘贴懒惰)。

理想情况下,我们希望采用其他人建议的方法(将someFunction分配给ClassB' prototype对象),因为这样可以避免每次调用{{1时创建这些唯一实例}}。但是,我想把它留在这里,因为它确实说明了其他人的建议和这个答案之间的细微差别。

谢谢!