JavaScript 对象和方法,但 getName 不是函数
JavaScript Object and methods but getName is not a function
我正在学习 JavaScript 并编写了一个简单的演示,但失败了。你能帮我弄清楚为什么 getName
不是一个函数吗?谢谢
var newPerson = function(name) {
this.name = name;
getName: return function() {
return this.name;
}
};
var personOne = newPerson("Diego");
var personTwo = newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
我会这样做的
var Person = function(name) {
this.name = name;
this.getName = function() {
return this.name;
}
};
var personOne = new Person("Diego");
var personTwo = new Person("Gangelo");
document.write(personOne.getName()); // prints Diego
document.write(personTwo.getName()); // prints Gangelo
您似乎正试图 return 一个对象,其中包含一些公开的方法。在那种情况下,这就是我会做的。
var newPerson = function (name) {
this.name = name;
var self = this;
return {
getName: function () {
return self.name
}
}
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
编辑:感谢 Pootie
或者你也可以这样做。
var newPerson = function (name) {
this.name = name;
this.getName = function () {
return this.name;
}
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
下次,使用 console.log() 而不是 document.write() 因为它更容易调试。
好吧,如果我们是 introducing Object-Oriented Programming,我不妨向您展示 JavaScript 如何做到最好:
// The ECMAScript 5 way
function Person(name) {
this.name = name;
}
Person.prototype.getName = function getName() {
return this.name;
};
var personOne = new Person("Diego");
var personTwo = new Person("Gangelo");
console.log(personOne.getName());
console.log(personTwo.getName());
下一个使用 ES6 Classes 并且是新 JavaScript 标准的一部分。
注意就浏览器实现而言,此语法仍在 "experimental stage" 中,可能无法在您的浏览器上运行。
// The ECMAScript 6 way
class Person {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
let personOne = new Person("Diego");
let personTwo = new Person("Gangelo");
console.log(personOne.getName());
console.log(personTwo.getName());
既然你说你喜欢我的例子,我想我会 post 我个人的喜好。不需要像其他示例那样 return 一个对象,因为函数本身就是一个对象。事实上,JS 中的一切都是对象。
查看另一个答案的分支:https://jsfiddle.net/6xpgjh94/
var newPerson = function (name) {
var self = this;
self.name = name;
self.getName = function(){
return self.name
};
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
我正在学习 JavaScript 并编写了一个简单的演示,但失败了。你能帮我弄清楚为什么 getName
不是一个函数吗?谢谢
var newPerson = function(name) {
this.name = name;
getName: return function() {
return this.name;
}
};
var personOne = newPerson("Diego");
var personTwo = newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
我会这样做的
var Person = function(name) {
this.name = name;
this.getName = function() {
return this.name;
}
};
var personOne = new Person("Diego");
var personTwo = new Person("Gangelo");
document.write(personOne.getName()); // prints Diego
document.write(personTwo.getName()); // prints Gangelo
您似乎正试图 return 一个对象,其中包含一些公开的方法。在那种情况下,这就是我会做的。
var newPerson = function (name) {
this.name = name;
var self = this;
return {
getName: function () {
return self.name
}
}
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
编辑:感谢 Pootie
或者你也可以这样做。
var newPerson = function (name) {
this.name = name;
this.getName = function () {
return this.name;
}
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo
下次,使用 console.log() 而不是 document.write() 因为它更容易调试。
好吧,如果我们是 introducing Object-Oriented Programming,我不妨向您展示 JavaScript 如何做到最好:
// The ECMAScript 5 way
function Person(name) {
this.name = name;
}
Person.prototype.getName = function getName() {
return this.name;
};
var personOne = new Person("Diego");
var personTwo = new Person("Gangelo");
console.log(personOne.getName());
console.log(personTwo.getName());
下一个使用 ES6 Classes 并且是新 JavaScript 标准的一部分。
注意就浏览器实现而言,此语法仍在 "experimental stage" 中,可能无法在您的浏览器上运行。
// The ECMAScript 6 way
class Person {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
let personOne = new Person("Diego");
let personTwo = new Person("Gangelo");
console.log(personOne.getName());
console.log(personTwo.getName());
既然你说你喜欢我的例子,我想我会 post 我个人的喜好。不需要像其他示例那样 return 一个对象,因为函数本身就是一个对象。事实上,JS 中的一切都是对象。
查看另一个答案的分支:https://jsfiddle.net/6xpgjh94/
var newPerson = function (name) {
var self = this;
self.name = name;
self.getName = function(){
return self.name
};
}
var personOne = new newPerson("Diego");
var personTwo = new newPerson("Gangelo");
console.log(personOne.getName()); // prints Diego
console.log(personTwo.getName()); // prints Gangelo