我正在尝试学习不同的对象声明类型和继承。在这里,首先我使用对象构造函数声明了一个名为 parent
的对象。然后,引入另一个对象child
,它继承了parent
的所有属性。
使用构造函数的父对象是:
function parent(){
this.parent_last_name="khan";
this.occupation="business";
}
然后声明一个子对象,并使用
使其继承父对象的所有属性和方法child.prototype=new parent();
在同一示例中,我替换了构造函数类型声明并使用了对象字面量类型声明。
var parent={
name: "khan",
occupation: "business",
ask: function(){
alert("what do you do?");
},
};
它给了我一个错误:“父级不是构造函数”。并且它没有打印任何内容。
我的问题是: 1)为什么对象字面量不适用于这个特定的示例?什么时候使用对象字面量类型以及什么时候使用构造函数?
2)构造函数相对于对象字面量的优点
和3)文字类型对象声明可以做我想做的事情吗?
完整代码
<html>
<body>
<script>
function parent() {
this.parent_last_name = "khan";
this.occupation = "business";
}
parent.prototype.ask = function() {
alert("what do you do?");
}
function child() {
this.child_name = "mohsin";
this.occupation = "student";
}
child.prototype = new parent();
var lol = new child();
document.write(lol.child_name + " " + lol.parent_last_name);
</script>
</body>
</html>
浏览器:火狐
最佳答案
对象字面量只是Object
的实例,而构造函数是Function
的实例,当时,它可以成为构造函数>new
运算符在其后面使用(即 new SomeFunc()
)。
请记住,函数是 JavaScript 的首要构造。它们可以是老式的过程函数、对象方法,也可以是对象构造函数。
何时使用对象构造函数?简单:当您想在相同或其他脚本文件中重用相同的对象结构时,您可能需要原型(prototype)链(继承)。
如果您需要将对象作为某些函数调用或类似内容的参数传递,对象文字就是正确的选择。
无论如何,每当您创建一个函数(无论是否是构造函数)时,您都会有一个原型(prototype)可用于定义成员,这些成员将成为使用整个函数创建的任何实例的一部分。从 ECMA-Script 5.x 开始,您还可以使用 Object.create(...)
:
var A = function() {};
A.prototype.doX = function();
Object.create(A.prototype, {
doY: {
value: function() { }
}
});
Object.create
方法也是在 JavaScript 中获得继承的另一种方法,因为它创建一个对象,其原型(prototype)是作为整个函数的第一个参数提供的对象。
关于错误...
您不能使用 new
运算符来使用对象字面量,这就是 Web 浏览器(或 ECMA-Script 运行时...)会抛出错误的原因,因为对象字面量是对象
而不是函数
。
关于javascript - 我如何使用对象字面量模式代替构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23935256/