使用Function.apply()使用原型构造对象

安德鲁

我对JS的原型继承有一些困惑。我正在尝试做的是:

  1. 定义一个名为mod的对象

    var mod = function() {
        function sayGoodbye() {
            alert("Goodbye!");
        }
    
        function saySomethingElse(message) {
            alert(message);
        }
    
        return {
            sayGoodbye: sayGoodbye,
            saySomethingElse: saySomethingElse
        };
    };
    
  2. 定义一个原型对象proto

    var proto = {
        sayHello: function() {
            alert("Hello!");
        }
    };
    
  3. mod的原型设置proto

    mod.prototype = proto;
    
  4. 调用一个函数,该函数使用proto原型构造mod的新实例

    function construct(constructor, args) {
    
        function constructorWrapper() {
            return constructor.apply(this, args)
        }
    
        constructorWrapper.prototype = constructor.prototype;
    
        return new constructorWrapper();
    }
    
    var foo = construct(mod, ["Other Message 1"]);
    var bar = construct(mod, ["Other Message 2"]);
    
    console.dir(foo);
    console.dir(bar);
    

构造函数创建的新实例国防部正确地使用应用功能,但它的原型是不是我缺少什么来阻止mod成为原型时使用proto构建?

这是上面的代码小提琴

谢谢堆!

克雷格·辛普森(Craig Simpson)

.prototype分配对您不起作用的原因是,像这样设置原型链仅在您new对构造函数使用运算符时才有效

您创建了一个工厂函数,该函数返回一个新创建的对象。创建实例时,请摆脱returninmod并使用它this来附加您的方法和usenew运算符,mod以使.prototype分配工作正常进行。

这可能令人困惑,所以我更新了您的小提琴:https : //jsfiddle.net/6fdo649y/1/

有几种方法可以实现您要完成的任务,但是此示例说明了为什么您看不到.prototype工作。

//Constructor function using this
function Mod(arg1) {
    this.sayGoodbye = function sayGoodbye() {
        alert("Goodbye!");
    }

    this.saySomethingElse = function saySomethingElse(message) {
        alert(message);
    }

    this.arg1 = arg1;
};

var proto = {
    sayHello: function() {
        alert("Hello!");
    }
};

Mod.prototype = proto;

function construct(constructor, args) {

    function constructorWrapper() {
        constructor.apply(this, args)
    }

    constructorWrapper.prototype = constructor.prototype;

    return new constructorWrapper();
}

var foo = construct(Mod, ["Other Message 1"]);
var bar = construct(Mod, ["Other Message 2"]);

console.dir(foo === bar);
console.dir(foo);
console.dir(bar);

编辑:通过传递与应用的args添加。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果构造函数返回对象,则无法使用原型

来自分类Dev

使用原型从另一个构造函数继承与在继承的构造函数内部使用apply方法之间的区别

来自分类Dev

使用原型从另一个构造函数继承与在继承的构造函数内部使用apply方法之间的区别

来自分类Dev

Javascript:默认原型字段显示未定义的对象(使用null构造函数创建的对象)

来自分类Dev

原型JavaScript-使用构造函数的函数

来自分类Dev

.apply 方法如何使用(类和原型)

来自分类Dev

在嵌套的原型子对象中使用“ this”

来自分类Dev

如何为原型使用对象创建?

来自分类Dev

对象原型无法使用“this”访问属性

来自分类Dev

创建构造函数后使用原型有什么好处?

来自分类Dev

使用原型方法访问构造函数中的变量

来自分类Dev

如何使用未分配的属性创建Javascript构造函数/原型?

来自分类Dev

Javascript构造函数-使用对象?

来自分类Dev

使用operator =的c ++对象构造

来自分类Dev

Javascript构造函数-使用对象?

来自分类Dev

JavaScript OOP:对象更改其原型(对于使用同一原型的所有其他对象)

来自分类Dev

使用单个JavaScript原型(使用对象文字)的多个文件

来自分类Dev

在对象内部使用对象的构造函数

来自分类Dev

将构造函数中使用的函数移至该构造函数的原型

来自分类Dev

使用clojurescript从js原型对象中删除项目

来自分类Dev

在Angular表达式中使用对象原型

来自分类Dev

SailsJS:使用原型继承扩展Javascript对象的最佳位置

来自分类Dev

不使用原型链并返回对象的优点/缺点

来自分类Dev

在Redux状态下使用原型功能存储对象

来自分类Dev

不使用原型链并返回对象的优点/缺点

来自分类Dev

使用其原型之一初始化 JS 对象

来自分类Dev

为什么在替换原始原型对象后仍可以使用旧的原型属性

来自分类Dev

原型继承和原型对象,为什么不被使用到这种程度呢?

来自分类Dev

通过构造传递对象数组时使用构造函数

Related 相关文章

  1. 1

    如果构造函数返回对象,则无法使用原型

  2. 2

    使用原型从另一个构造函数继承与在继承的构造函数内部使用apply方法之间的区别

  3. 3

    使用原型从另一个构造函数继承与在继承的构造函数内部使用apply方法之间的区别

  4. 4

    Javascript:默认原型字段显示未定义的对象(使用null构造函数创建的对象)

  5. 5

    原型JavaScript-使用构造函数的函数

  6. 6

    .apply 方法如何使用(类和原型)

  7. 7

    在嵌套的原型子对象中使用“ this”

  8. 8

    如何为原型使用对象创建?

  9. 9

    对象原型无法使用“this”访问属性

  10. 10

    创建构造函数后使用原型有什么好处?

  11. 11

    使用原型方法访问构造函数中的变量

  12. 12

    如何使用未分配的属性创建Javascript构造函数/原型?

  13. 13

    Javascript构造函数-使用对象?

  14. 14

    使用operator =的c ++对象构造

  15. 15

    Javascript构造函数-使用对象?

  16. 16

    JavaScript OOP:对象更改其原型(对于使用同一原型的所有其他对象)

  17. 17

    使用单个JavaScript原型(使用对象文字)的多个文件

  18. 18

    在对象内部使用对象的构造函数

  19. 19

    将构造函数中使用的函数移至该构造函数的原型

  20. 20

    使用clojurescript从js原型对象中删除项目

  21. 21

    在Angular表达式中使用对象原型

  22. 22

    SailsJS:使用原型继承扩展Javascript对象的最佳位置

  23. 23

    不使用原型链并返回对象的优点/缺点

  24. 24

    在Redux状态下使用原型功能存储对象

  25. 25

    不使用原型链并返回对象的优点/缺点

  26. 26

    使用其原型之一初始化 JS 对象

  27. 27

    为什么在替换原始原型对象后仍可以使用旧的原型属性

  28. 28

    原型继承和原型对象,为什么不被使用到这种程度呢?

  29. 29

    通过构造传递对象数组时使用构造函数

热门标签

归档