当前位置: 代码迷 >> 综合 >> 写自己的代码之未解决
  详细解决方案

写自己的代码之未解决

热度:12   发布时间:2024-01-22 05:21:25.0

一不小心就跟js中的call和apply较上劲了,哎,结果,输的好惨!我也搞不懂为什么在看Ext源码却忽然去搞js的底层实现函数,归纳成:没有目标,没有计划,没有危机感!!!

总之:之前的努力也不能白费:将废品贴上,以后有心情再来试试。


资料上说:for( in )就是js的反射,那时一个激动,不就可以可以获取ftn中的属性吗.可以测试发现,temp只能是对象

var ftn = function(a,b){         //搞不懂call是如何改变这里的this的this.name = "咕咕鸡";this.method = function(){};this.call = function(obj){           //这里是类方法,这里面的this是ftn的引用var ary = arguments;var temp = this;             //this指的是ftn这个引用,用for( in ) 来获取this的全部属性和方法?这是错的,ftn不是一个对象//this();                   //运行ftn方法; 参数不好办,先忽略 2013/12/25alert(this);for(var c in temp){alert(c);obj[c] = temp[c];    //拷贝ftn的方法属性到obj}}}    //call的作用是改变this的指向var ftn = new ftn();var $obj = {};ftn.call($obj);//alert($obj.name);//	temp();


我本来是按照下面的写法:

var ftn = function(a,b){         //搞不懂call是如何改变这里的this的this.name = "咕咕鸡";this.method = function(){};}    //call的作用是改变this的指向,如何改变this?ftn.call = function(obj){           //这里是类方法,这里面的this是ftn的引用var ary = arguments;var temp = this;             //this指的是ftn这个引用,用for( in ) 来获取this的全部属性和方法?这是错的,ftn不是一个对象//this();                   //运行ftn方法; 参数不好办,先忽略 2013/12/25//ftn.prototype.constructor(arguments[0],arguments[1]);   //this没改变...for(var c in temp){alert(c);obj[c] = temp[c];    //拷贝ftn的方法属性到obj}}//var $ftn = new ftn();var $obj = {};ftn.call($obj);//alert($obj.name);//	temp();
这里this指的是:ftn  通过用typeof this 发现是function 而,上边写着ftn中typeof this 是个object,这里 for循环中只能获取到call,本意想获取ftn中的属性的。 还有一个难题:call要改变调用ftn的对象,并执行ftn(),可以如何改变this?


apply仿写:功能不全,至少不能改变this,不能调用ftn.apply 这个ftn函数

var ftn = function(){ this.version='1.0'};ftn.apply = function(target,arg,flag){if(flag){apply(taret,arg);}if(typeof arg == 'object'){for(var temp in arg){      //我去 这里in啊,打什么冒号target[temp] = arg[temp];alert(target[temp]);}}return target;}var obj = {};ftn.apply(obj,{                      mark : 'thought and practise',  //我去 这里打冒号啊,打什么等号method : function(){alert(typeof mark);     //undefinedalert(this.mark);		//这里不打this不能用啊}});alert(typeof obj.method);alert(typeof obj.mark);alert(obj.mark);obj.method();  	    //apply()将附加的属性加到target这个对象中,返回值压根没用到,这个obj就存在附加属性,js函数和java一样,存在地址传值?

放弃了,再用下去没什么意思,还是继续看Ext,这种js已经给了的东西,等实战足够多了,在看具体书籍

  相关解决方案