在Javascript中使用create vs prototype

时间:2015-06-27 17:40:42

标签: javascript

我是JS的新手。

我正在JSFiddle中进行实验。

我创建了一个对象A,然后我创建了两个新的对象B和C,如下所示。

debugger;
var A = {
    name:"h",
    lastname:'n',
    address:'B'
};
A.getname = function()
{
    console.log(this.name);
};
var B = Object.create(A);
var C=new Object();
C.prototype = A;
console.log(B.lastname);
console.log(C.lastname);
A.getname();
B.getname();
C.getname();

我已经采用了使用来自javascript的Object.create(旧对象)创建一个新对象的概念:Good Parts book和从http://www.codecademy.com/courses/objects-ii/3/3?curriculum_id=506324b3a7dffd00020bf661继承对象的概念。

调试后, 但我的值console.log(C.lastname)未定义,C.getname()给我错误。

TypeError: C.getname is not a function

为什么它会让我犯错误,在这种情况下使用Object.create()有什么好处。

1 个答案:

答案 0 :(得分:2)

如果您想使用.prototype进行继承,则需要AC作为类(而不仅仅是对象)。

var A = function() {
    this.name = 'h';
    this.lastname = 'n';
    this.address = 'B';
}
A.prototype.getname = function() {
    console.log(this.name);
};
var a = new A(); 
console.log(a.getname()); // h

var C = function() {};
C.prototype = new A();
var c = new C();
console.log(c.lastname); // n
console.log(c.getname()); // h

使用Object.create而不是Object.prototype进行继承的一个显着优势是(可以在这里看到),使用Object.create可以使用简单对象(而不是类)。

为了更好地理解使用Object.create的优点,请参阅@ FelixKling对similar question的接受答案......