搜尋

首頁  >  問答  >  主體

javascript - 小白,來問一個原型拓展的基礎問題,求指導?

1.第三行程式碼沒有理解。
第三行應該是實作了 為super_robot新增 data作為原型物件。
那為什麼不是 SuperRobot.__proto__=data;
而是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 天前529

全部回覆(3)我來回復

  • 曾经蜡笔没有小新

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

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

    此時super等于什么?
    是不是等于Fun内声明的a?
    所以__proto_該加給誰。

    回覆
    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 但是這樣會使所有函式實例都能存取這兩個屬性,所以一般不建議這樣擴充

    回覆
    0
  • 我想大声告诉你

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

    SuperRobot只是一個工廠函數,他回傳的東西才是核心

    回覆
    0
  • 取消回覆