javascript - 小白,来问一个原型拓展的基础问题,求指导?
黄舟
黄舟 2017-05-18 10:58:53
0
3
462

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
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
曾经蜡笔没有小新
function Fun(){
    var a = {};
    return a;
}
var super = Fun();

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

我想大声告诉你

这样写相当于改写了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 但是这样会使所有函数实例都能访问到这两个属性,所以一般不建议这样扩展

我想大声告诉你

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!