如果我的对象返回错误的构造函数JavaScript,这有关系吗?
好吧,就看这个问题,这似乎很重要,但让我们看看我做的一个测试 所以我创建了3个构造函数。我做了一辆普通的车,然后是马自达,然后是MX8。它们都是基于JSFIDLE中的代码继承的。这是我所做的一个外壳,更多细节可以在 顺便说一句,我是Object.create的超级粉丝,它不需要任何保姆如果我的对象返回错误的构造函数JavaScript,这有关系吗?,javascript,Javascript,好吧,就看这个问题,这似乎很重要,但让我们看看我做的一个测试 所以我创建了3个构造函数。我做了一辆普通的车,然后是马自达,然后是MX8。它们都是基于JSFIDLE中的代码继承的。这是我所做的一个外壳,更多细节可以在 顺便说一句,我是Object.create的超级粉丝,它不需要任何保姆 var Car = function () { //code here } var Mazda = function (type) { this.type = type; //more
var Car = function () {
//code here
}
var Mazda = function (type) {
this.type = type;
//more code here including a simple method test
}
var MX8 = function () {
//more code here
}
Mazda.prototype = new Car();
MX8.prototype = new Mazda("MX8");
var z = new MX8();
//refer to my JSFiddle
z.interior; // got correct interior
z.type; // got correct type ie model
z.warrantyInfo(); // method was correctly inherited
z.speed; // got correct speed
z.constructor === MX8; // false (unless I specify the constructor in the code of which is commented out in my JSFiddle)
简短回答:
您需要显式地设置构造函数
function Base() {}
function Derived() {}
// old prototype object is gone, including constructor property
// it will get however all the properties attached by Base constructor
Derived.prototype = new Base();
Derived.prototype.constructor = Derived;
如果我的对象返回了错误的构造函数,这有关系吗
好吧,这取决于你是否在使用那个财产。我认为保持正确的构造函数是一个很好的实践
可能的用例:
function getType (target) {
// name is empty unless you use the function declaration syntax
// (read-only property)
return target.constructor.name;
}
getType(new Derived()) // "Derived"
getType(new Base()) // "Base"
旁注:在JS中有更好的实现继承的方法。 我最喜欢的模式如下:
function Base (x) { this.x = x; }
function Derived (x, y) { Base.call(this, x); this.y = y; }
// creates an empty object whose internal "[[Prototype]]" property
// points to Base.prototype
Derived.prototype = Object.create(Base.prototype);
Derived.prototype.constructor = Derived;
对象后面的idea.create
基于:
function create (proto) {
function f () {}
f.prototype = proto;
return new f();
}
实际的函数Object.create
更好,因为您可以将null
作为原型传递,而使用上述代码则不起作用。
无论如何,你应该看看这个优秀的播放列表:。你能澄清一下你真正的问题是什么吗?当然,我想如果事情是正确继承的或者看起来是这样的,为什么会有关系?有很多博客文章、网站和Youtube视频解释Javascript的基本原理。更不用说我同意“thefourtheye”——你问的问题还不清楚。标题已经没有意义了,对象不会返回任何内容!它们是对象,被动存储空间。
构造函数
对JS本身没有意义,如果你是这个意思的话。相关:-还有更多。哦,我同意,我会自己维护构造函数,因为正如你所说的“良好实践”。我只是一直在看视频和博客,谈论对象如何不能用错误的构造函数正确继承,而我似乎继承得很好。这就是为什么我不认为这是一个坏问题,但也许是。谢谢你的资源。是的,像我之前的其他人一样,我正在摆脱“新”这个词和传统的继承方式。然而,正如你所知道的,有些东西是在野外,所以我仍然有机会了解这些东西。