为什么这个Javascript代码会产生错误

Why is this Javascript code producing an error?

本文关键字:错误 代码 Javascript 为什么      更新时间:2023-09-26

我不明白为什么这段代码不起作用。我正在尝试理解Javascript中的原型。如果我在函数中声明一个新函数,那么为什么我不能调用该函数呢?

<script>
  function Person(first) {
    this.firstName = first;                  
  }
  Person.prototype.name=function() {
    this.addLastNameInner=function() {
    return this.firstName+" Appended last name";   
    }                
  }
  Person.prototype.name.addLastName=function() {
    return this.firstName+" Appended last name";    
  }
  var pr=new Person('john');
  alert(pr.name.addLastNameInner());//Not working
  alert(pr.name.addLastName());//working fine
</script>

要使代码正常工作,您需要更改声明name:的方式

Person.prototype.name = {
  addLastNameInner: function() {
    return this.firstName+" Appended last name";   
  }
};
Person.prototype.name.addLastName = function() {
  return this.firstName + " Appended last name";    
};

因为,作为.name,您所做的是不使用new关键字初始化它。而且不能这样做。.name必须是具有函数的Object

对于代码中对象和函数的范围存在一些误解。我希望下面的代码是你想要的。

    function Person(first) {
        this.firstName = first;
    }
    Person.prototype.name={
        addLastNameInner:function(pr){
              return pr.firstName+" Appended last name";   
        }
    }
    Person.prototype.name.addLastName=function(pr){
        return pr.firstName+" Appended last name";    
    }
    var pr=new Person('john');
    alert(pr.name.addLastNameInner(pr));//Working fine
    alert(pr.name.addLastName(pr));//working fine