这里是我的示例代码的JavaScript protyping - 差异
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype = {
constructor: Person,
printInformation: function() {
console.log(this.toString());
},
toString: function() {
return "Name: " + this.name + ", Age: " + this.age;
}
};
var person1 = new Person("Some Name", 15);
person1.printInformation();
console.log(typeof(person1));
console.log(Object.getPrototypeOf(person1) === Object.prototype);
var book = {
title: "Some book",
author: "Some author",
printInformation: function() {
console.log(this.toString());
},
toString: function() {
return "Book: " + this.title + ", Author(s): " + this.author;
}
};
book.printInformation();
var bookPrototype = Object.getPrototypeOf(book);
console.log(typeof(book));
console.log(Object.getPrototypeOf(book) === Object.prototype);
输出:
Name: Some Name, Age: 15
object
false
Book: Some book, Author(s): Some author
object
true
为什么Object.getPrototypeOf(person1) === Object.prototype
返回假,而Object.getPrototypeOf(book) === Object.prototype
回是真的吗?
两者都是对象的实例,都指向原型,我希望它们都应该返回true。请赐教。
感谢您的快速响应。第二部分呢。 “另外,开发人员在使用”函数“还是使用JSON格式创建类之间有优先选择吗?除了可读性之外,优点/缺点是什么?” –
@KrishnanSriram:为了在一个对象上实现你自己的方法,你应该使用一个构造函数,这样你就不会扩展Object.prototype,除非你完全意识到分支。其他语法不一定是JSON语法。它是对象的字面语法,对于不需要增强的普通对象很有用,但是如果有一点点初始化操作,构造函数也可以用到。 – 2015-12-15 00:36:20
@KrishnanSriram这是一个主要基于观点的问题,因此是堆栈溢出的主题,所以我从主要问题中删除了该部分。另外,一次只问一个问题,而不是多个问题。 – Oriol