js学习篇之三:自定义对象
自定义对象
对象类(class)和对象实例(instance)
类和实例的关系类似于一张蓝图和一间造好的房子,在这里不赘述。
看个自定义对象的例子:
//Define constructor
function Blog(date,body)
{
this.date = date;
this.body = body
this.toHTML = function()
{
//code
}
}
上面定义了一个Blog的对象。this关键字表明在对象的任意一个实例里面都有自己的date,body特性和toHTML方法(this用于设置实例拥有的特性和方法),5个实例就有5个副本,然而通常来说我们的本意是想让一种对象仅仅只有一个toHTML方法的副本就够了,其他等于就是浪费资源和空间。所以才有prototype的闪亮登场,看另外一种创建方法的方式,可让实例共享一份方法代码。
Blog.prototype.toHTML
= function() {
//code
}
“多亏了每个对象都有个隐藏对象prototype,javascript中的类才能成真。”
prototype用于设置隶属于类层(class
level)的特性与方法。所以不仅方法可以共享,特性也可以共享,不过实例也有可能出现特殊的情况需要不一样,通过对原型的特性或方法在实例中重写即可达到效果。如下图:
构造函数与原型
构造函数负责创建实例的一切事项,原型则处理类层的一切事项。两者合在一起就是javascript的类。
prototype也可以用来拓展内建类型,不过也会带来相应的问题。只有在不兼容的javascript实现缺少某个标准方法的时候,为原型添加这个标准方法,例如IE4,IE5中都没有Function.apply()方法。
通过添加以下代码得到拓展:
if(!Function.prototype.apply())
{
Function.prototype.apply =
function(object,parameters){//code}
}
以上是我的学习总结,有错误之处多多指正。
对于是什么时候使用实例创建方法,还是原型创建方法,或者通过类创建方法,还有一些模糊,感觉涉及到架构方面的内容,欢迎大家来说说看法。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。