函数返回未在Javascript中定义

时间:2018-11-23 14:33:44

标签: javascript function

function people (name, age) {
  this.name = name;
  this.age = age;
}

var rob = new people("robert jr", 41);
var sam = new people("sam davies", 25);

function isOlderThan(age) {
  if(rob.age > sam.age) 
    return true;
  else return false;
}

我尝试使用此sam.isOlderThan(rob);

但是它不起作用。我对此很陌生,有帮助吗?

5 个答案:

答案 0 :(得分:2)

//  If you want to be able to call this as sam.isOlderThan()
//  you need to use a prototype to add that function to the persons
//  so they all have that function bound to them.
function person (name, age) {
  this.name = name;
  this.age = age;
}
person.prototype.isOlderThan = function( other_person ) {
  return this.age > other_person.age;
};
var rob = new person("robert jr", 41);
var sam = new person("sam davies", 25);

console.log( sam.isOlderThan( rob ) );
console.log( rob.isOlderThan( sam ) );

答案 1 :(得分:1)

功能isOlderThan尚未在人身上定义。

如果您想像sam.isOlderThan(rob);这样称呼,可以在人身上使用prototype

function People(name, age) {
  this.name = name;
  this.age = age;
}

var rob = new People("robert jr", 41);
var sam = new People("sam davies", 25);

People.prototype.isOlderThan = function(p) {
  return this.age > p.age;
};

console.log(sam.isOlderThan(rob));
console.log(rob.isOlderThan(sam));

答案 2 :(得分:1)

您好,欢迎来到StackOverflow。 假设您要使用people函数定义类的类型,并且将isOlderThan作为该类的函数的类型-请注意更改。

  1. 构造函数(例如People)通常以大写字母开头
  2. 要将isOlderThan链接到现有类-您应使用如下所示的原型语法。
  3. 在isOlderThan函数内部,我们引用了this-指示当前对象的isOlderThan than函数被调用。

现在,我们可以为创建的每个People对象调用isOlderThan函数。

function People(name, age) 
{
  this.name = name;
  this.age = age;
}

var rob = new People("robert jr", 41);
var sam = new People("sam davies", 25);


People.prototype.isOlderThan = function(age) {
    if (this.age > age) 
        return true;
     else return false;
}

console.log(sam.isOlderThan(50))
console.log(rob.isOlderThan(sam.age))

enter code here

答案 3 :(得分:0)

您不能使用sam.isOlderThan,因为isOlderThan函数中没有定义people函数(与其他语言的类别相关)。

isOlderThan在全局范围内定义。

因此,您可以以isOlderThan()window.isOlderThan()的身份运行它(只要您在浏览器中)

无需传递agerobsam,因为它们是在全局范围内定义的,并且可以在isOlderThan函数中使用。

答案 4 :(得分:0)

看看这个小提琴是否有帮助:

function Person(name, age) {
  this.name = name;
  this.age = age;
}

var rob = new Person("robert jr", 41);
var sam = new Person("sam davies", 25);

function isOlderThan(rob, sam) {
  if (rob.age > sam.age) {
    return true;
  } else {
    return false;
  }
}

console.log(`Rob is older than Sam: ${isOlderThan(rob, sam)}`);

https://jsfiddle.net/ao2ucrmq/1/