call的实现原理及一个很好的应用场景

来源:互联网 发布:广州pm2.5实时数据 编辑:程序博客网 时间:2024/06/05 04:56

call方法是js中比较重要的一个知识点,看了很多介绍也未必能够对他有个深刻的理解,那就让我们看看他的实现原理吧。

//这个方法只是简单的模拟了call的实现原理,对context是否非空,参数对象素组字符串的类型都没有做处理。Function.prototype.call2 = function(context) {    context.fn = this;    var args = [];    for(var i = 1, len = arguments.length; i < len; i++) {        args.push('arguments[' + i + ']');    }    //args数组自动toString处理    eval('context.fn(' + args +')');    delete context.fn;}

原型链继承的一般写法,一直感觉不够简洁

function MyObject(name, message) {  this.name = name.toString();  this.message = message.toString();}MyObject.prototype.getName = function() {  return this.name;};MyObject.prototype.getMessage = function() {  return this.message;};

偶然发现的call方法优化,感觉高大上很多

function MyObject(name, message) {    this.name = name.toString();    this.message = message.toString();}(function() {    this.getName = function() {        return this.name;    };    this.getMessage = function() {        return this.message;    };}).call(MyObject.prototype);
原创粉丝点击