2014-06-14 47 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功能僅創建一次。如果沒有原型,每次都會創建一個新的函數,而不管其意味着什麼。

相關問題