前端新手求助面向对象问题

现在有一个对象如下:

var doc= $(document);

function people(){                        //一个people对象
this.name = li;
}
people.prototype = {                      //对象方法
    sayName: function(){
        console.log(this.name);
    }
    bindEvent: function(){                //绑定页面元素
        doc.delegate('button','click',function(){
            people.sayName();   //这里报错Uncaught TypeError: people.sayName is not a function
                                //这里想调用sayName方法,但是会报错
        });
    }
}

前端新手,刚刚接触面向对象,我想问为什么调用sayName 方法会报这个错误,请教一下这个错误的原因我应该去看js什么方面的书能够更透彻的理解

阅读 1.9k
2 个回答

sayName方法在对象的构造函数的原型,其实例才具有sayName方法;

像楼上那样的是一种解决方案;

//方法1
bindEvent: function() { //绑定页面元素
    doc.delegate('button', 'click', this.sayName.bind(this));//此处通过bind方法强制绑定this对象
}
//方法2
bindEvent: function() { //绑定页面元素
    var _this = this;
    doc.delegate('button', 'click', function() {
        _this.sayName();
    });//此处通过变量存储this
}
//方法3
bindEvent: function() { //绑定页面元素
    doc.delegate('button', 'click', () => this.sayName());//通过箭头函数,箭头函数的this指向上层函数
}

应该这样写

bindEvent: function(){                //绑定页面元素
    doc.delegate('button','click',function(){
        this.sayName();
    }.bind(this));
}

这个涉及到闭包和原型链,三言两语很难说清楚,建议你好好看一下相关的知识点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题