1. La troisième ligne de code n'est pas comprise.
La troisième ligne doit être implémentée. Ajoutez data
à super_robot
en tant qu'objet prototype. super_robot
添加 data
作为原型对象。
那为什么不是 SuperRobot.__proto__=data;
而是say.__proto__=data;
Alors pourquoi ce n'est pas SuperRobot.__proto__=data;
mais say.__proto__=data
??
function SuperRobot(data) {
var say = function() { return "Hello World!"; };
say.__proto__=data;
return say;
}
var data = { name:"atom", age: 5};
var super_robot = SuperRobot(data);
console.log(super_robot()); //Hello World!
console.log(super_robot.age); //5
console.log(typeof super_robot); //function
À qui faut-il
super
等于什么?是不是等于
Fun
内声明的a?所以
__proto_
être ajouté en ce moment.Écrire comme ceci équivaut à réécrire la chaîne de prototypes de super_robot, qui ne peut pas être considérée comme une extension. À l'origine, super_robot.__proto__ pointait vers Function.prototype. Après la réécriture, super_robot.__proto__ pointait vers l'objet de données entrant. On peut dire qu'après la réécriture, super_robot ne peut plus être considéré comme une vraie fonction. Désormais, il ne peut plus utiliser les méthodes du prototype de fonction, telles que call, apply, bind, etc.
.Si vous l'étendez, vous devez écrire say.__proto__.name = name, say.__proto__.age = age, ce qui équivaut à Function.prototype.name = name, Function.prototype.age = age, mais ceci fera toutes les instances de fonction. Ces deux attributs sont accessibles, il n'est donc généralement pas recommandé d'étendre comme ça
SuperRobot n'est qu'une fonction d'usine, ce qu'il renvoie est le noyau