简而言之:是否可以使用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();
答案 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
。