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

时间:2015-12-11 11:27:15

标签: javascript prototype

我无法理解为什么此代码无效。我试图在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>

2 个答案:

答案 0 :(得分:0)

要使代码正常工作,您需要更改声明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

答案 1 :(得分:-1)

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

    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