我希望能够在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的原型变量的很多信息,但我觉得这是可能的。
编辑:修正了一个拼写错误
答案 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时创建这些唯一实例}}。但是,我想把它留在这里,因为它确实说明了其他人的建议和这个答案之间的细微差别。
谢谢!