gpt4 book ai didi

javascript - 为什么我的 javascript mixin 不工作?

转载 作者:行者123 更新时间:2023-11-30 12:55:54 28 4
gpt4 key购买 nike

看看这个klass为实例化对象添加原型(prototype)方法的实现(来自 Alex MacCaw 的 Javascript Web 应用程序):

var Class = function(){
var klass = function(){
this.init.apply(this, arguments);
};

klass.prototype.init = function(){};

// Shortcut to access prototype
klass.fn = klass.prototype;

// Shortcut to access class
klass.fn.parent = klass;

// Adding class properties
klass.extend = function(obj){
var extended = obj.extended;
for(var i in obj){
klass[i] = obj[i];
}
if (extended) extended(klass)
};

// Adding instance properties
klass.include = function(obj){
var included = obj.included;
for(var i in obj){
klass.fn[i] = obj[i];
}
if (included) included(klass)
};

return klass;
};

adding instance properties位对我不起作用。

var Restaurant = new Class;

Restaurant.prototype = {
init: function(name, cuisine, location) {
this.name = name || 'needs a name';
this.cuisine = cuisine || 'needs a cuisine';
this.location = location || 'needs a location';
}
}

Restaurant.include({
save: function(id) {
return 'saved';
},
destroy: function(id) { /* ... */ },
included: function(klass) {
console.log(klass, " was included!");
}
});

var chow = new Restaurant('Chows', 'chinese', 'mumbai');

问题是 chow对象不响应保存方法。然而,包含的回调有效。

我收到错误:Uncaught TypeError: Object #<Object> has no method 'save'

这是为什么呢?我该如何解决?

最佳答案

当你执行这一行时:

Restaurant.prototype = {...};

您刚刚替换了 Restaurant 对象的整个原型(prototype),因此它不再具有本应来自 klass 的方法。它不会有 .include() 例如没有 .include(),该方法不能添加你的 .save() 因此没有 .save()

这个klass 代码的工作方式我假设你是从书里学来的,你没有分配给.prototype(因为那破坏了应该是的东西那里)。您可以调用 .include() 向原型(prototype)添加新方法,或调用 .extend() 向实例添加新方法。

关于javascript - 为什么我的 javascript mixin 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130328/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com