suchen

Heim  >  Fragen und Antworten  >  Hauptteil

javascript - Anfänger, lassen Sie mich eine grundlegende Frage zur Prototypenentwicklung stellen. Können Sie mir bitte eine Anleitung geben?

1. Die dritte Codezeile wird nicht verstanden.
Die dritte Zeile sollte als Prototypobjekt zu super_robot hinzugefügt werden. super_robot添加 data作为原型对象。
那为什么不是 SuperRobot.__proto__=data;
而是say.__proto__=data; Warum heißt es dann nicht SuperRobot.__proto__=data;
, sondern say.__proto__=data ??

2.🎜
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
黄舟黄舟2799 Tage vor531

Antworte allen(3)Ich werde antworten

  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 11:00:53

    function Fun(){
        var a = {};
        return a;
    }
    var super = Fun();

    此时super等于什么?
    是不是等于Fun内声明的a?
    所以__proto_应该加给谁。

    Antwort
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-18 11:00:53

    这样写相当于改写了super_robot的原型链,不能算是扩展,原来super_robot.__proto__指向的是Function.prototype,改写之后super_robot.__proto__指向传入的data对象,可以说改写后super_robot已经不能算是一个真正的函数了,他现在用不了Function原型上的方法,比如call,apply,bind等

    console.log( super_robot instanceof Function ); // false
    console.log( super_robot.call ); // undefined
    

    如果扩展的话应当写say.__proto__.name = name,say.__proto__.age = age相当于Function.prototype.name = name,Function.prototype.age = age 但是这样会使所有函数实例都能访问到这两个属性,所以一般不建议这样扩展

    Antwort
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-18 11:00:53

    SuperRobot仅仅是是一个工厂函数,他返回的东西才是核心

    Antwort
    0
  • StornierenAntwort