易截截图软件、单文件、免安装、纯绿色、仅160KB

javascript写类方式之三

取前面两种的优点:
a、用构造函数来定义类属性(字段)
b、用原型方式来定义类的方法。
就有了第三种方式。这种方式貌似采用的人较多。
3、综合构造函数/原型
/**
* Person类:定义一个人,有个属性name,和一个getName方法
* @param {String} name
*/
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
}

这样,即可通过构造函数构造不同name的人,对象实例也都共享getName方法,不会造成内存浪费。
但似乎这样的代码风格似乎仍然没有java的类那么紧凑,把属性,构造方法(函数),方法都包在大括号内。
public class Person {
//属性(字段)
String name;
//构造方法(函数)
Person(String name) {
this.name = name;
}
//方法
String getName() {
return this.name;
}
}

为了让js代码风格更紧凑,把挂在prototype的方法代码移到function Person的大括号内。
function Person(name) {
this.name = name;
Person.prototype.getName = function() {
return this.name;
}
}

似乎很神奇,还能这么写啊!验证一下
var p1 = new Person("Jack");
var p2 = new Person("Tom");
console.log(p1.getName());//Jack
console.log(p2.getName());//Tom

没有报错,控制台也正确输出了。说明可以这么写,呵呵。
嗯,似乎很完美。
a 、可以通过传参构造对象实例
b 、对象实例都共享同一份方法不造成内存浪费
c 、代码风格也比较紧凑
但每次new一个对象的时候都会执行  
Person.prototype.getName = function() {
        return this.name;
}
造成了不必要的重复的运算。因为getName方法挂在prototype上只需执行一次即可。只需稍微改造下:
function Person(name) {
this.name = name;
if(Person._init==undefined) {
alert("我只执行一次!");
Person.prototype.getName = function() {
return this.name;
}
Person._init = 1;
}
}

new两个对象,
var p1 = new Person("Andy");//第一次new会弹出'我只执行一次!'
var p2 = new Person("Lily");//以后new的对象不会再执行了


相关文档:

一家之言:说说 JavaScript 的类成员的访问控制

看书的时候遇到这样一个问题,程序代码如下
var ob = function(){
var obj = this;
function fn1(){
alert( obj === window );//false
alert( this === window );//ture
}
this.fn2 = function() {
fn1();
}

当时很不明白fn1里面第二个alert的结果,为 ......

javascript常用

calcu()  ----函数实现两个数相乘
document.write();  ---打印
document.calc.元素名.value;  --获得表单的值
document.表单名。表单元素名。value  为表单赋值
定义函数:
 function  名字()
 {
    //javaScript预语句
 }
 onClick="函数名";  ......

[翻译]High Performance JavaScript(004)

XMLHttpRequest Script Injection  XHR脚本注入
    Another approach to nonblocking scripts is to retrieve the JavaScript code using an XMLHttpRequest (XHR) object and then inject the script into the page. This technique involves creating an XHR object, downloading the JavaScript f ......

[翻译]High Performance JavaScript(005)

第二章  Data Access  数据访问
    One of the classic computer science problems is determining where data should be stored for optimal reading and writing. Where data is stored is related to how quickly it can be retrieved during code execution. This problem in JavaScri ......

假如浏览器离开了JavaScript [ 邓侃 ] 于:2009 05 10


假如浏览器离开了JavaScript
假如浏览器离开了 JavaScript,那么互联网上绝大多数网页就无法展示。但是激进的主张并非一无是处,至少它能否促进我们对熟视无睹的事物,换一个角度做进一步思考。假如用Java替换JavaScript,会有什么好处?好处或许有三个层面,对于手机应用而言,这些优点尤其可贵。
1. 预先编译,事件响 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号