Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将属性写入cookie_Javascript - Fatal编程技术网

Javascript 将属性写入cookie

Javascript 将属性写入cookie,javascript,Javascript,我被要求创建一个函数,将通过函数发送的“类型”属性写入cookie。我从来没有使用过足够的javascript来理解它,这个特殊的请求非常特殊,我已经寻找了超过8个小时的类似代码的解释 如果我声明了以下变量: var types = { "sugar" : { "color" : "blue", "weight" : 1200, "decoration" : "frosting"}, "chocolate chip" : { "color" : "brown", "weight"

我被要求创建一个函数,将通过函数发送的“类型”属性写入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是types变量,这是正确的吗

以下是完整的代码片段:

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的公共方法,该方法接受一个参数--type。此方法应创建一个cookie基实例,并将请求的cookie类型的属性附加到该实例。如果无法创建类型,则返回null。此代码的长度不应超过约10行


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

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);
}

将这些属性组合起来,就可以将一个对象的属性复制到另一个对象。这为您提供了实现的大部分方法,这听起来像是他们所要求的。

通过查看您对答案的最后一条评论,听起来您希望实现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
中声明的所有属性。

这并不能回答我的问题,或者我应该说是向我提出的问题。虽然您提供的代码确实让它看起来更熟悉。他们需要一个函数,该函数接受一个类型,然后将该类型的属性写入cookie。我无法理解的是如何编写一个泛型函数,将属性写入任何定义的类型。至少是这样。问题是,他们到底想要在CookieFactory中实现一个名为bakeCookie的公共方法,该方法只接受一个参数——type。此方法应创建一个cookie基实例,并将请求的cookie类型的属性附加到该实例。如果无法创建类型,则返回null。此代码的长度不应超过约10行。我宁愿给我一个一般性的解释,或者做outis所做的事情,并提供一个更好的代码集,让我知道他们真正想要的是什么。这只是(p in thing)的
{
@outis:我以前从未听过这个表达,你能翻译一下吗?:)他的意思是你给出了答案,遗憾的是使用了“类型['sugar']”现在是函数的使用方式。下面是函数的工作方式:以下代码段将与代码一起正确执行…var sugarCookie=CookieFactory.bakeCookie(“sugar”);var ammondcookie=CookieFactory.bakeCookie(“ammond”);您回答了我关于如何循环遍历属性的问题。这解决了一半的问题。我应该能够找出如何将每个属性组合成单个字符串。唯一的问题是您所说的使用参数的方式是否会成为问题。@CMS:这是一个讽刺语句“way to…”和“既然你可以免费得到牛奶,为什么还要买奶牛?”这个词的字面意思并不适用,但可以作为2度隐喻。@Ramhound,编辑了我的示例以符合你的API要求…@outis,明白了!