2014-06-14 45 views
0

我开始理解JavaScript的缺点,但是否有使用像这样的JavaScript对象的任何待遇。优点/不使用原型链和返回对象,而不是

var Person(name, age) { 
    var obj = { 
     species: "Homo sapien", 
     location: "Earth" 
    }; 
    obj.name = name; 
    obj.age = age; 
    return obj; 
} 

var Mike = Person("Mike", 17); // => { ... name: "Mike", age: 17} 

与标准

var personProtoype = { 
    name: "anon", 
    age: 0, 
    species: "Homo sapien", 
    location: "Earth" 
} 

var Person = function(name, age) { 
    this.name = name; 
    this.age = age; 
} 

Person.prototype = personPrototype; 

var Mike = new Person("Mike", 17); 

因为它似乎使用较少的代码,更容易实现和理解。第一种方法的“继承”也很简单。

var Student(name, age, major) { 
    var obj = Person(name, age); // => { ... name: name, age: age} 
    obj.major = major;   // => { ... name: name, age: age, major: major} 
    return obj; 
} 

据我所知,以下并不使用原型链,只是简单地构造对象的函数。我只是想知道这样做是否有任何好处?也许有物体不会回望一个巨大的原型链? (如果这种行为是有史以来的)

+0

欢迎使用stackoverflow!可能我建议你试试[搜索](http://stackoverflow.com/search?q=%5Bjavascript%5D+prototype+vs+this+object)。 SO上的这个问题已经有很多很好的答案。 [这](http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript)可能是你想要的。祝您好运:) –

+0

谢谢您的光临!对不起,我一定会在下次检查时更彻底,但我认为下面的答案是我正在寻找的:)谢谢! – kjpark

+0

您可能会对ES6中的类语法感到高兴:http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes –

回答

0

我想不出除了你列出的任何优点,但可能会有一些。这里有一些不足之处:

  1. 没有instanceof测试。在你的问题使用Person实现,稍重命名:

    var Mike1 = Person_no_prototype("Mike", 17); 
    var Mike2 = new Person_with_prototype("Mike", 17); 
    console.log(Mike1 instanceof Person_no_prototype); // false 
    console.log(Mike2 instanceof Person_with_prototype); // true 
    
  2. 当方法存在,使用更多的内存。考虑一个greet方法的实现,把在任objPerson.prototype

    /* obj or Person.prototype */.greet = function greet() { 
        alert("Hi there, " + this.name + "!"); 
    }; 
    

    使用原型,该greet功能仅创建一次。如果没有原型,每次都会创建一个新的函数,而不管其意味着什么。

相关问题