不使用原型链和返回对象的优点/缺点
我开始理解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
的方法,把在任obj
或Person.prototype
:
/* obj or Person.prototype */.greet = function greet() {
alert("Hi there, " + this.name + "!");
};
使用原型, greet
函数只创建一次。 如果没有原型,每次都会创建一个新的函数,而不管其意味着什么。
上一篇: Pros/Cons of not using the prototype chain and returning objects instead
下一篇: Revisiting extending native prototypes after ECMAScript 5