因此,在处理这个精美教程的#19时,http://jhusain.github.io/learnrx/,我发现练习无需使用Object.create。 (参见注释掉的行)
function() {
var videos = [
{
"id": 65432445,
"title": "The Chamber"
},
{
"id": 675465,
"title": "Fracture"
},
{
"id": 70111470,
"title": "Die Hard"
},
{
"id": 654356453,
"title": "Bad Boys"
}
];
// Expecting this output...
// [
// {
// "65432445": "The Chamber",
// "675465": "Fracture",
// "70111470": "Die Hard",
// "654356453": "Bad Boys"
// }
// ]
return videos.
reduce(function(accumulatedMap, video) {
// Object.create() makes a fast copy of the accumulatedMap by
// creating a new object and setting the accumulatedMap to be the
// new object's prototype.
// Initially the new object is empty and has no members of its own,
// except a pointer to the object on which it was based. If an
// attempt to find a member on the new object fails, the new object
// silently attempts to find the member on its prototype. This
// process continues recursively, with each object checking its
// prototype until the member is found or we reach the first object
// we created.
// If we set a member value on the new object, it is stored
// directly on that object, leaving the prototype unchanged.
// Object.create() is perfect for functional programming because it
// makes creating a new object with a different member value almost
// as cheap as changing the member on the original object!
//var copyOfAccumulatedMap = Object.create(accumulatedMap);
//copyOfAccumulatedMap[video.id] = video.title;
accumulatedMap[video.id] = video.title;
//return copyOfAccumulatedMap;
return accumulatedMap;
},
// Use an empty map as the initial value instead of the first item in
// the list.
{});
}
copyOfAccumulatedMap
做,你最终得到一个像这样的对象
看起来很有趣,但令人费解,因为我不能在这里用这段代码做同样的事情
var fruit = { 'taste' : 3 };
var apple = Object.create(fruit);
apple['size'] = 7;
var apple = Object.create(fruit);
apple['hardness'] = 6;
var apple = Object.create(fruit);
apple['weight'] = 10;
console.log(apple.taste);
console.log(apple.size); // undefined as I would expect
console.log(apple.hardness); // undefined as I would expect
console.log(apple.weight);
那么是什么让练习中的对象拥有所有链式原型但是不允许我的苹果做同样的事情呢?
答案 0 :(得分:1)
您回答了自己的问题:Object.create
制作了原型链。 Object.create
将所创建对象的原型对象作为参数。
var copyOfAccumulatedMap = Object.create(accumulatedMap);
旧的accumulatedMap
被用作copyOfAccumulatedMap
的原型。然后返回复制,下次通过accumulatedMap
。