gpt4 book ai didi

javascript - 如何使用 ES5 Object.create 和对象字面量语法模拟构造函数?

转载 作者:搜寻专家 更新时间:2023-11-01 04:38:59 24 4
gpt4 key购买 nike

假设我有这样一个对象:

var Foo = {
x: 5,
sprite: new Image()
}

问题:我想用正确的 src 初始化那个 Sprite 。但是,当我使用以下创建技术时:

var f = Object.create(Foo);

我没有构造方法(又名初始化函数)来设置 sprite.src = 'cool.png';

我的问题:

如果我使用对象文字技术和 Object.create(),我什么时候真正初始化我的一些内部状态(比如 new Image())

我的解决方案:

var Foo = {
create: function() {
var f = Object.create(Foo);
f.sprite.src = 'cool.png';
return f;
}
}

但是,我不知道这是否是一个很好的模式。如果有办法的话,我想用“JavaScript 方式”来做。 :)

谢谢!

最佳答案

我做的事情与你上面写的非常相似,但我将它与模块模式结合起来:

var Vehicle = (function(){
var exports = {};
exports.prototype = {};
exports.prototype.init = function() {
this.mph = 5;
};
exports.prototype.go = function() {
console.log("Going " + this.mph.toString() + " mph.");
};

exports.create = function() {
var ret = Object.create(exports.prototype);
ret.init();
return ret;
};

return exports;
})();

从外部看,这暴露了 Vehicle.create()Vehicle.prototype。然后,如果我想制作派生类型,我可以这样做:

var Car = (function () {
var exports = {};
exports.prototype = Object.create(Vehicle.prototype);
exports.prototype.init = function() {
Vehicle.prototype.init.apply(this, arguments);
this.wheels = 4;
};

exports.create = function() {
var ret = Object.create(exports.prototype);
ret.init();
return ret;
};

return exports;

})();

此模式让我可以派生类型而不会出现 Car.prototype = new Vehicle() 错误,如果我的构造函数采用参数,则失败

关于javascript - 如何使用 ES5 Object.create 和对象字面量语法模拟构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855543/

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