将属性写入cookie

时间:2010-01-29 05:47:55

标签: javascript

我被要求创建一个函数,该函数将通过函数发送的“类型”的属性写入cookie。我从来没有使用过足够的javascript来理解它,这个特殊的请求非常特别,我一直在寻找类似代码的解释超过8小时。

如果我声明了跟随变量:

var types = {
    "sugar" : { "color" : "blue", "weight" : 1200, "decoration" : "frosting"},
    "chocolate chip" : { "color" : "brown", "weight" : 12, "chocolateType" : "milk"}
}; 

以下函数返回产品的重量。

CookieBase.prototype.getWeight = function() { return this.weight; };

如果实际声明它,我将如何向cookie写入发送给函数的任何类型的属性。我是否正确,getweight函数中的 this 是类型变量?

以下是整个代码片段:

function CookieBase() {}
CookieBase.prototype.getWeight = function() { return this.weight; };

var CookieFactory = function(){
    var types = {
        "sugar" : { "color" : "blue", "weight" : 1200, "decoration" : "frosting"},
        "chocolate chip" : { "color" : "brown", "weight" : 12, "chocolateType" : "milk"}
    };
    return {};
}();

我不是在寻找代码本身我真的希望有人向我解释这个概念。这是一个工作的筛选过程,所以我想给他们自己的代码,但我不熟悉这个概念。

以下是问题以及他们想要的内容:

  

在CookieFactory中实现一个名为bakeCookie的公共方法,该方法采用单个参数 - 类型。此方法应创建一个cookie基本实例,其中附加了所请求的cookie类型的属性。如果无法创建类型,则返回null。此代码长度不应超过10行。

2 个答案:

答案 0 :(得分:3)

要在对象上设置任意属性,可以使用括号语法:

thing.setProperty = function (type, val) {
    this[type] = val;
}

您还可以使用for循环覆盖对象的属性名称:

var msg='';
for (p in thing) {
     msg += p + ': ' + thing[p] + '\n';
}
if (console && console.log) {
    console.log(msg);
} else {
    alert(msg);
}

组合这些,您可以将一个对象的属性复制到另一个对象。这可以帮助您实现mixins的大部分工作,听起来就像他们要求的那样。

答案 1 :(得分:2)

通过outis查看您对答案的最后评论,听起来好像您想要实现 CookieFactory 这样的对象:

// assuming that the CookieBase constructor is declared
var CookieFactory = (function () {
  var types = {
    "sugar" : {"color" : "blue", "weight" : 1200, "decoration" : "frosting"},
    "chocolate chip" : {"color" : "brown", "weight" : 12,
                        "chocolateType" : "milk"}
  }; 

  return { // public interface
    bakeCookie: function(type){
      var cookie = new CookieBase(),
          cookieType = types[type];

      if (!cookieType) return null; // no type found, return null

      for(var prop in cookieType) 
        if (cookieType.hasOwnProperty(prop))
          cookie[prop] = cookieType[prop];

      return cookie;
    }
  };
})();

var myCookie = CookieFactory.bakeCookie('sugar');
// Object color=blue weight=1200 decoration=frosting
alert(myCookie.getWeight()); // 1200

正如您注意到bakeCookie方法将创建一个CookieBase对象,它将复制传递给它的对象参数的属性。

由于返回的对象是使用CookieBase构造函数创建的,因此您可以访问该返回对象上CookieBase.prototype中声明的所有属性。