好的,所以这里有一些我正在使用atm的代码。
我的问题是我并没有真正区分对象和对象原型。到目前为止,我想,如果我制作一个新的对象,例如new Memory,它继承了我在Memory中声明的所有属性。但是,在我的代码中,我需要向Memory.prototype添加选项。
所以我的核心问题是:对象的属性与object.prototype的属性有什么区别?
编辑:指定: 在Memory函数中我记录this.options。除非我包含Memory.prototype.options = {...},否则这不起作用。如果新内存继承了内存中的属性,我在上面定义了例如this.options.availableCards,为什么我需要在原型中添加选项?
var createMemory = function (){
new Memory( {wrapperID: 'memory-game'} );
};
var Memory = function (options) {
//check for required options
if ((options.wrapperID === undefined)){
console.error('ERROR: not all required options given. wrapperID is required!');
return false;
}
//hardcoded values
this.options.availableCards = 22;
this.options.cols = 4;
this.options.rows = 4;
this.options.fliptime = this.options.flipTime || 1; //set default
this.options = extend({}, this.options);
extend(this.options, options);
//this._init();
console.log(this.options);
};
// why is this required?
Memory.prototype.options = {
onGameEnd: function(){
return false;
}
};
createMemory();
答案 0 :(得分:0)
您忘记在createMemory
中返回新对象。
还有一些其他修复,我必须发明一个extend
函数,因为你没有包含你的函数。
//Extend function
function extend(a, b) {
for (var i in b) {
if (b.hasOwnProperty(i)) {
a[i] = b[i];
}
}
return a;
}
//Memory class
function Memory(options) {
//check for required options
if ((options.wrapperID === undefined)) {
console.error('ERROR: not all requried options given. wrapperID is requried!');
return false;
} // hardcoded values
this.options.availableCards = 22;
this.options.cols = 4;
this.options.rows = 4;
this.options.flipTime = this.options.flipTime || 1;
this.options = extend({}, this.options);
extend(this.options, options);
//this._init();
};
Memory.prototype.options = {
onGameEnd: function() {
alert("Inherited")
}
};
//Instantiater
function createMemory() {
return new Memory({
wrapperID: 'memory-game'
});
};
//Instantiate
var m = new createMemory();
//Call inherited
console.log(m);
m.options.onGameEnd();

Object的属性特定于该对象的实例,而Prototype的属性在该对象的实例之间共享。
例如,如果您有每个实例的ID号,那么ID
属性需要在Object上,因为它对该实例是唯一的。
相反,如果你的方法与所有实例完全相同,那么你可以通过将它放在Prototype中来保存内存,然后继承它。