1

我从来没有涉足过像这样制作 javascript 对象,但我认为我有充分的理由。

这是我的例子:

x = new Something(pallet,['blue','green','orange']);
x.try(['blue']);

我想制作一个设置两个变量托盘和颜色数组的对象。

然后在 try 函数中我想传递一个数组,但在我想访问的函数pallet和颜色对象中。有人可以告诉我这是否可能吗?也许是一个小演示或教程?

4

3 回答 3

1
var Something = function( pallet, colors){
    this.try = function(arr){
        //stuff
    }
};

那是一个构造函数,然后您可以按照您的描述使用它。Try 将可以使用托盘和颜色。正如评论中提到的,try 不是一个很好的方法名称,因为它是一个保留字。

于 2012-11-11T04:42:05.630 回答
1
function Something(pallet, colors) {
var myColors = colors;
var myPallet = pallet;

function getColors() {
    for (var i = 0; i < myColors.length; i++) {
        document.write(myColors[i] + "<br />");
    }
}

return {
    getColors: getColors
};
}

var mySomething = new Something('myNewPallet', ['green', 'red', 'blue']);
mySomething.getColors();

好的,所以我们在这里做的是创建一个闭包,然后将 getColors 函数返回给实例化Something对象的人。您可以在此处此处阅读有关闭包的信息。但是,基本上,您正在“关闭”颜色和托盘成员,并且由于 getColors 存在于 Something() 的上下文中,因此它可以访问Something 的所有成员。然后,通过将该函数返回给调用者,我们允许他们使用已“捕获”其托盘和颜色列表的对象调用该功能。

请记住,这是一个非常非常高级的一般闭包视图,特别是 Revealing Module 模式。阅读我在 JSFiddle上制作的这个小提琴中包含的链接和猴子。我想一旦你明白了,你会很高兴的。

看起来你正在尝试制作一个 Pallet 对象,所以我为你创建了一个新的小提琴

这是代码:

function Pallet(palletName, palletColors) {
    this.name = palletName; //name is now a property of Pallet
    this.colors = palletColors; //colors is now a property of Pallet
}

Pallet.prototype.getColor = function(color) {
    //access Pallet properties using the 'this' keyword 
    //ex. this.colors or this.name
    if (this.colors.indexOf(color) > -1) {
        return 'Color found'; //Or whatever you need to do.
    }

    return 'Color not found'; //Or whatever you need to do.
};


var myPallet = new Pallet('myNewPallet', ['green', 'red', 'blue']);
document.write(myPallet.getColor('red'));​ //using document.write for simplicity
于 2012-11-11T05:24:39.273 回答
-1

避免使用new-- 根据我的经验,我发现工厂方法更健壮。例如,您可以通过执行以下操作来完成您的要求:

function Something(pallet, colors) {
    var that = {};

    that.foo = function (moreColors) {
        // Here you can access pallet, colors, and moreColors.
        // Use "that" to refer to the current object, not "this".
    };

    return that;
}

x = Something(somePallet, ['blue', 'green', 'orange']);
x.foo(['blue']);
于 2012-11-11T04:07:40.733 回答