首页 > 解决方案 > 设置对象原型(示例)

问题描述

我正在尝试从“java脚本-理解奇怪的部分”课程中理解示例。解释说,当Greeter.init.prototype设置为时,Greeter.prototype它是为了更清晰的代码目的,所以我们可以在Greeter.prototype. 但是当尝试没有该设置的代码时 - 将我的方法直接存储Greeter.init.prototype在控制台中时出现错误:

未捕获的类型错误:无法设置未定义的属性“原型”

这是为什么?

(函数(全局,$){

var Greeter = function (firstName){
    return new Greeter.init (firstName); 
}

Greeter.prototype = {};

Greeter.init = function (firstName){

    var self = this;
    self.firstName = firstName
}

Greeter.init.prototype = Greeter.prototype;

})(窗口, jQuery);

(函数(全局,$){

var Greeter = function (firstName){
    return new Greeter.init (firstName); 
}

Greeter.init.prototype = {};

Greeter.init = function (firstName){

    var self = this;
    self.firstName = firstName
}

})(窗口, jQuery);

标签: javascript

解决方案


init您正在设置尚未初始化的属性 ( ) 的原型。

var Greeter = function (firstName){
    // also don't put spaces before parentheses of function calls
    return new Greeter.init(firstName); 
}

// Greeter.init is undefined here - so it throws
Greeter.init.prototype = {};

Greeter.init = function (firstName){

    var self = this;
    self.firstName = firstName
}

您应该首先初始化 init 并设置原型

var Greeter = function (firstName) {
    // also don't put spaces before parentheses of function calls
    return new Greeter.init(firstName); 
}

Greeter.init = function (firstName) {
    var self = this;
    self.firstName = firstName
}

// Greeter.init is no longer undefined
Greeter.init.prototype = {};

推荐阅读