我被要求创建一个函数,该函数将通过函数发送的“类型”的属性写入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行。
答案 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
中声明的所有属性。