JavaScript 学习笔记 3 _构造函数、类和原型

恩,闪亮登场~~~
JavaScript 如何为像我一样的先接触面向对象语言的孩子们提供编程舒适性?

构造函数、类和原型

Java和JavaScript都支持new关键字,允许我们创建预先定义的对象的实例,终于找到java的感觉了。

在java中所有东西(除了少数的基本类型)都是一个对象,最后都继承自java.lang.Object类。我们首先声明类型,然后使用构造函数实例化:
MyObject myObj = new MyObject(art1,arg2);

JavaScript也有对象和类的概念,但是没有内建继承的概念。事实上,每个JavaScript对象是相同基类(一个有能力在运行时将成员字段和函数与自己绑在一起的类)的实例。所以,和java不同,可以在运行时给对象分配任意的属性:
MyJavaScriptObject.completelyNewProperty = “something”;

一段看起来与java声明很相似的东西:
var myObj = new MyObject();

但是我们没有定义类MyObject,而是定义了一个同名的函数。这里是一个简单的构造函数:
function MyObject(name,size)
{
this.name = name; /*作为MyObject的一个成员*/
this.size = size;
}

随后我们可以这样调用它:
var myObj = new MyObject(“tiddles”,”7.5 meters”);
alert(“size of”+myObj.name+”is”+myObj.size);

一段代码结束了,那么如果我们想初始化alert()的调用呢?一种习惯做法是在构造函数中声明这个函数:
function MyObject(name,size)
{
this.name = name;
this.size = size;
this.tellSize = function()
{
alert(“size of”+myObj.name+”is”+myObj.size);
}
}

var myObj = new Object(“tiddles”,”7.5 meters”);
myObj.tellSize();

上面的一段代码可以工作,但有问题必须注意:每当我们创建一个MyObject的实例时,我们都会创建了一个新的函数,这样势必会存在内存泄漏问题。还有就是我们在无意中创建了一个闭包(closure)(关于这个将在后面的博文中详细解说,现在不必在意)。
由于这个原因我们应该考察一下更加安全的替代品:原型(prototype)。

原型是JavaScript对象的一个属性,在面向对象语言中没有对等物。函数和属性可以与构造函数的原型关联起来。然后原型和new关键字协同工作,当使用new调用函数时,函数原型的所有属性和方法会附加到结果对象上。听起来好怪啊,但还是来看看下面的代码吧:
function MyObject(name,size)
{
this.name = name;
this.size = size;
}

MyObject.prototype.tellSize = function() /*函数原型(MyObject.prototype)的属性方法*/
{
alert(“size of”+this.name+” is ”+this.size);
}

var myObj = new MyObject(“tiddles”,”7.5 meters”);/*这个时候原型的属性tellSize便附加到结果对象上了,简单吧*/
myObj.tellSize();

补充下:关键字this在运行时确定为对象的实例;顺序问题,在声明构造函数之后,我们才能引用原型,对象只继承那些在调用构造函数之前已经添加到原型上的东西。原型可以在两次调用构造函数之间进行修改,并且可以附加任何东西(不仅仅是函数)到原型上:

MyObject.prototype.color = “red”;
var obj1 = new MyObject();

MyObject.prototype.color = “blue”;
MyObject.prototype.soundEffect = “bo000oing!!”;
var obj2 = new MyObject();


总结:使用原型来为JavaScript对象定义类似于类的行为,是一条安全和可靠的路径。下一篇中我们将扩展某些确定的内建类(即那些由浏览器自身实现和通过JavaScript暴露出来的类,也称作宿主对象)的原型。休息休息,休息一下~~~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值