javascript - 设置对象原型(示例)
问题描述
我正在尝试从“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);
- 更改部分出错(第 7 行和第 15 行):
(函数(全局,$){
var Greeter = function (firstName){ return new Greeter.init (firstName); } Greeter.init.prototype = {}; Greeter.init = function (firstName){ var self = this; self.firstName = firstName }
})(窗口, jQuery);
解决方案
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 = {};