原型vs在javascript中应用

时间:2014-03-22 15:14:38

标签: javascript

如果我需要一个对象用于另一个用于函数,这是最好的吗?

function A() {

    this.alert = function () {
        console.log(b.value);
    }

    this.alert2 = function () {
        console.log(this.value);
    }
}

function B() {
    this.value = 'test';
}

var a = new A();
var b = new B();

A.prototype.b = b;

// Option 1
`a.alert();`

// Option 2
`a.alert2.apply(b);`

我认为选项2更好,因为只在一个函数中使用对象(b)。

2 个答案:

答案 0 :(得分:4)

原型更容易,但我会反过来使用它:

function B() {
    this.value = 'test';
}
B.prototype.alert = function() {
    console.log(this.value);
}
var b = new B();
b.alert();

如果你想使用不同对象的函数/方法,你应该给它一个参数(而不是像b函数那样使用隐式的全局a.alert变量):

var a = {
    alert: function(x) {
        console.log(x.value);
    }
};
a.alert(b);
当你有方法时,

或从中继承,例如:

var a = {
    value: "a test",
    alert: function() {
        console.log(this.value);
    }
};
// =============================
function B() {
    this.value = 'test';
}
B.prototype.alert = a.alert; // mixin inheritance
var b = new B();
b.alert();

答案 1 :(得分:0)

没有最佳选择,关于你必须做的事情。

将b放在其原型中的第一个选项使A更加耦合到b。

第二个你正在改变它的比赛..你需要知道这个功能是做什么的,如果你没有文件,你可以传递一个没有这个功能所需的属性的对象,所以这不是一个例如,制作api的好选择。

Algo将this.alert设置为接收参数的函数会不会更高兴?

这一切都取决于你的需求......