在javascript中使用对象组合传递变量

在javascript中使用对象组合传递变量,javascript,composition,object-composition,Javascript,Composition,Object Composition,我已经试着用对象合成来概括我的想法有一段时间了,但我似乎找不到“正确的方法”来做我以前用OOP做的事情。假设我有一个包含3个变量的类实体,使用OOP,我只创建一个类实体,这个类的所有子类都有这3个属性,但是使用对象组合,我似乎无法理解我应该如何模拟这个继承 const Entity = { let self = { x: 0, y: 0, z: 0, } 我是否需要在我创建的所有其他需要这些属性的对象中创建这些属性?还是有更好的方法

我已经试着用对象合成来概括我的想法有一段时间了,但我似乎找不到“正确的方法”来做我以前用OOP做的事情。假设我有一个包含3个变量的类实体,使用OOP,我只创建一个类实体,这个类的所有子类都有这3个属性,但是使用对象组合,我似乎无法理解我应该如何模拟这个继承

const Entity = {
    let self = {
         x: 0,
         y: 0,
         z: 0,
}
我是否需要在我创建的所有其他需要这些属性的对象中创建这些属性?还是有更好的方法重用这些属性

const ObjectX = {
     let state = {
        x: 0,
        y: 0,
        z: 0,
        abc: 0,
        cba: 0,
return Object.assign(state, canDoX);
}

const ObjectY = {
     let state = {
        x: 0,
        y: 0,
        z: 0,
        foo: 0,
        bar: 0,
return Object.assign(state, canDoY);
}
如果您想(通过原型)用另一个对象扩展某个对象,那么可以使用
object.create
方法,该方法将对象作为参数,并使用通过原型链链接到它的传入对象创建一个新对象

const实体={
x:1,
y:2,
z:3
};
const objectX=Object.create(实体);
objectX.abc=‘某物’;
console.log(objectX.x);
console.log(objectX.y);
console.log(objectX.z);

console.log(objectX.abc)您可能想要一个构造函数

BatLoser函数(batterName){
this.batter=batterName;this.balls=0;this.strikes=0;this.onBase=false;this.trikeout=false;
this.swing=函数(){
var zeroOneTwo=Math.floor(Math.random()*3);
开关(零点二){
案例0:
这个.balls++;
console.log('ball'+this.balls+'for'+this.batter);
打破
案例1:
这个.strikes++;
console.log('strike'+this.strikes+'表示'+this.batter));
打破
案例2:
this.onBase=true;
console.log(这个.batter+'击球并且在垒上');
归还这个;
}
如果(this.balls>3){
this.onBase=true;
console.log(this.batter+'walks on base');
}
如果(此值大于2){
这个。删除=真;
console.log(this.batter+‘删除’);
}
归还这个;
}
this.bathup=函数(){
而(!this.onBase&!this.trikeout){
这是swing();
}
归还这个;
}
}
var bob=新击球手('bob'),joe=新击球手('joe');

鲍勃。巴顿普();console.log('----');乔。巴顿普()对象文字不应该在属性列表的末尾有返回值或逗号。您向我们展示的代码甚至不会编译
const Entity={}
是文字对象声明,后面应该是键/值对,但是你有一些
let self
语句,它肯定是不正确的,并且会自动抛出错误。
实体和这个类的所有子类都会有这3个属性
,在Javascript中你会使用原型,但首先你需要创建一个类,而不是一个对象。@Keith创建一个类很酷,但这只是语法上的糖分,所以我不会说你需要创建一个,但也许你应该创建一个。我认为理解javascript中底层函数和对象的工作方式对于理解javascript中类的工作方式非常重要。@MatusDubrava我一直在关注这一点,所以我认为这是解决问题的方法。谢谢你的回答,这绝对是我要搜索的。