gpt4 book ai didi

javascript - javascript中的面向对象

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

我想知道在 Javascript 中使用 OOP 的最佳方式是什么。

有这个原型(prototype)的东西,你有函数风格的方式。但是两者都有非常糟糕的继承基类的方法。

所以我尝试构建一种方法来实现这一点,而无需使用原型(prototype)等。

function Car(name) {
this.Name = name;

this.FullName = function () {
return this.Name;
}
}

function SpecialCar(name, variant) {
//BaseClass.apply(this, PARAMS AS ARRAY);
Car.apply( this, [name] );

//new property
this.Variant = variant;

//override function
this.FullName = function () {
return this.Name + " " + this.Variant ;
}
}

var audi = new Car("audi");
$("#result").append(audi.FullName() + "<br>");

var audia3 = new SpecialCar("audi", "a3");
$("#result").append(audia3.FullName()+ "<br>");

您可以在此处查看 jsFiddle:http://jsfiddle.net/vu9ZF/2/

这可以吗还是只是不好的做法?

很高兴能得到一些答案,为什么其他方法更好,因为我就是不明白。

编辑:感谢大家如此迅速地回答我!我试图为自己在 javascript 中找到某种 OOP 方式,而不是回答如何在 javascript 中进行 oop。我不喜欢为此使用原型(prototype)的方式,因为我大部分工作时间都在使用 c#,而且在“类似 c# 的 oop”和“原型(prototype) oop”之间切换有点令人困惑。但是评论中有人告诉我,避免原型(prototype)不是一个好主意,所以我放弃了。

感谢 stackoverflow,你太棒了,为我节省了很多时间 =)

最佳答案

是这样的:

function Car ( name ) {
this.name = name;
}

Car.prototype.fullName = function () {
return this.name;
}

function SpecialCar ( name, variant ) {
Car.apply( this, arguments );
this.variant = variant;
}

SpecialCar.prototype = Object.create( Car.prototype );

SpecialCar.prototype.fullName = function () {
return this.name + ' ' + this.variant;
};

(您需要为 IE8 填充 Object.create)

现场演示: http://jsfiddle.net/3Rehr/


因此,方法应该分配给构造函数的原型(prototype)对象,而不是给实例本身。

此外,为了使用 super 构造函数预处理实例,只需执行以下操作:

Car.apply( this, arguments );

所以不需要this.base

关于javascript - javascript中的面向对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9415277/

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