是否可以使用Literal表示法从对象继承对象?

时间:2014-03-09 09:31:32

标签: javascript inheritance object-literal

简而言之:是否可以使用Literal notation方式从对象继承对象,或者我们必须使用Constructor方式?

例如:(文字方式)

var obj = {}, obj2 = {};

obj.str = "hello world!";
obj.printTxt = function () {
    console.log(this.str);
};

obj2.prototype = obj.prototype; // occurs error message `(TypeError: obj2.printTxt is not a function)`
obj2.printTxt();

1 个答案:

答案 0 :(得分:1)

“文字符号”示例的问题根源是obj.prototype不存在。对象没有名为prototype的有意义属性。对象与其原型之间的关系是不透明和不可变的 - 没有标准的方法来确定原型是什么,并且在构造之后没有标准的方法来改变它。

最接近的是ES5方法Object.create

var bar = {baz: []};
var foo = Object.create(bar);

在各方面都等同于

var foo, bar = {baz: []};
(function () {
    function Foo() {}
    Foo.prototype = bar;
    foo = new Foo;
})();

并创建一个对象foo,其原型是(不透明且不可变)bar