JavaScript对象和方法,但getName不是函数

时间:2016-06-10 04:31:51

标签: javascript oop object member-functions

我正在学习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




4 个答案:

答案 0 :(得分:3)

看起来你正试图用一些暴露的方法返回一个对象。在那种情况下,这就是我要做的。



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(),因为它更容易调试。

答案 1 :(得分:1)

我会这样做的

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

答案 2 :(得分:0)

好吧,如果我们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标准的一部分。

注意此语法仍处于"实验阶段"就浏览器实施而言,可能无法在您的浏览器上运行。



// 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());




答案 3 :(得分:0)

既然你说你喜欢我的例子我以为我会发布我的个人偏好。由于函数本身是一个对象,因此无需像其他示例一样返回对象。事实上,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