不使用原型链和返回对象的优点/缺点

我开始理解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;
}

我明白以下几点根本不使用原型链,只是简单地构造对象的函数。 我只是想知道这样做是否有任何好处? 也许有物体不会回望一个巨大的原型链? (如果这种行为是有需要的话)


除了你列出的东西外,我想不出任何优势,尽管可能会有一些。 以下是一些缺点:

  • 没有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
    
  • 当方法存在时,使用更多的内存。 考虑一个的实现greet的方法,把在任objPerson.prototype

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

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

  • 链接地址: http://www.djcxy.com/p/94021.html

    上一篇: Pros/Cons of not using the prototype chain and returning objects instead

    下一篇: Revisiting extending native prototypes after ECMAScript 5