Archive for 一月 24th, 2011

Actionscript中MovieClip,Sprite,Shape的区别

在AS变成中,经常会遇到MovieClip,Sprite和Shape。 其中MovieClip最熟悉了,影片剪辑,在flash中就可以创建。MovieClip含有一个时间轴。 而Sprite就是一个没有时间轴的MovieClip,由于这一属性,使得Sprite特别适合作为容器装在不会变化的图片,文本以及图形。 Shape也有graphics属性,可以作图,但是Shape不是一个容器,使得shape不可以addChild,同样的,Shape也不支持鼠标事件。 虽然这么说容易理解,但是实际上,MovieClip是Sprite的子类,所以准确的说,MovieClip是“有时间轴”的Sprite,才是最准确的。

关于JavaScript中的this

只要牢牢记住一点:this指向函数的调用者。 最典型的例子: var obj = { a:1, fn:function(){ alert(this.a); } } obj.fn(); 此时,fn的调用者是obj,所以fn中的this指向obj,所以显示为obj.a。再看: var a = 2; var obj = { a:1, fn:function(){ alert(this.a); } } obj.fn.call(window); 第一行的a,就是等于2的那个,是属于window域的,call会改变调用者,在这里,obj.fn将调用者更改为window,所以this指向window,所以将显示为window.a。 var a = 2; var fn = function(){ alert(this.a); } fn(); 这里,fn也是window域的,所以,其实是在执行window.fn(),那么,调用者为window,所以显示window.a。 下面说一下js创建对象的方式,常用的,如下面这个样子: function o(){ }; o.prototype = { value : 1, fn : function(){ alert(this.value); } ...Read More

JavaScript中Function作为类构造函数时的返回值

function a(){ return this.test(); }; a.prototype.test = function(){ return { a:”12345″ }} var obj = new a(); alert(obj.test); 如果在函数a中不return这个对象,obj会不意外地继承test方法,也就是成为a.prototype的一个指针。但是如果return了,new出来的对象将断开与prototype的链接,变成了一个毫不相干的玩意。 请各位童鞋注意这个问题。 其实,js就不是我们通常所讲的面向对象语言,它没有类的概念。现在的所有的实现js的oo的写法,都是基于js的基于原型继承的面相对象的特性,按照一般概念上的类的写法仿制的。如果又按照一般概念上的类和对象的特点去理解使用它的话,掉到坑里是迟早的事情。 希望各位童鞋在学习js的时候,注意力要放在原型继承上,并在此基础上来考虑new的问题。