我开始理解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 :(得分:0)
我想不出除了你列出的那些之外的任何优点,尽管可能有一些。以下是一些缺点:
没有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
函数只创建一次。如果没有原型,您每次都会创建一个新函数,其中包含任何开销。