日期:2014-05-16  浏览次数:20363 次

面向对象的Js-JavaScript的特点

1.?JavaScript灵活性
用不同方式定义方法:
1.?使用方法定义的方式
function startAnimation() {
? ...
}

function stopAnimation() {
? ...
}
2.?使用原形方式
var Anim = function() {
? ...
};
Anim.prototype.start = function() {
? ...
};
Anim.prototype.stop = function() {
? ...
};

var myAnim = new Anim();
myAnim.start();
...
myAnim.stop();
3.?使用另一种不同的方式
var Anim = function() {
? ...
};
Anim.prototype = {
? start: function() {
??? ...
? },
? stop: function() {
??? ...
? }
};
4.?为Function类添加方法用于声明方法
Function.prototype.method = function(name, fn) {
? this.prototype[name] = fn;
};

var Anim = function() {
? ...
};
Anim.method('start', function() {
? ...
});
Anim.method('stop', function() {
? ...
});
5.?链式调用
Function.prototype.method = function(name, fn) {
??? this.prototype[name] = fn;
??? return this;
};

var Anim = function() {
? ...
};
Anim.
? method('start', function() {
??? ...
? }).
? method('stop', function() {
??? ...
? });
2.?弱类型语言
在JavaScript中,定义变更时不必声明其类型。并不意味着变更没有类型,一个变量可以属于几种类型之一,这取决于其包含的数据。
JavaScript中有五种原始值:Undefined,Null,Boolean,Number,String
Undefined数据类型的值只有一个:undefined
??在js中如果只声明了一个引用,没有值,那么它的值默认就是undefind.
Null数据类型的值只有一个:null
Boolean数据类型的值只有两个:true,false
Number任何整数、浮点值都是在number里的值
typeof的返回值有五个:undefined,boolean,number,string,object
null与undefined的关系:undefined实际上从null派生而来
??? alert(null == undefined);
对于函数定义中的变量来说,加var表示局部变量,不加var表示全局变量
强制转换有三种:Boolean(value),Number(value),String(value)

String s = ‘s’ ? alert(typeof s) ?string?? // 是原始值,放在栈里
String s = new String(‘s’); ? alert(typeof s) ?object // 对象,放在堆里

3.?函数
在JavaScript中,函数是一等对象。它们可以存储在变更中,可以作为参数传给其它函数,可以作为返回值从其它函数传出,还可以在运行时进行构造。
可用function() {..}这样的语法创建匿名函数。它们没有函数名,但可以被赋给变量
(function() {
? var foo = 10;
? var bar = 2;
? alert(foo * bar);
})();

(function(foo, bar) {
? alert(foo * bar);
})(10, 2);

var baz = (function(foo, bar) {
? return foo * bar;
})(10, 2);
4.?对象的易变性(晚绑定)
早绑定:是指在实例化对象之前定义它的特性和方法,这样编译器或解释程序就能提前转换机器代码。
晚绑定:指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需要检查对象是否支持特性和方法即可
JavaScript的对象具有易变性。这意味着能使用一些在大多数别的语言中不能使用的技术,例如为函数加属性:
function displayError(message) {
? displayError.numTimesExecuted++;
? alert(message);
};
displayError.numTimesExecuted = 0;
上面例子意味着你可以对先前定义的类和实例化的对象进行修改;
// 定义一个person类
function Person(name, age) {
? this.name = name;

? this.age = age;
}

// 定义其方法
Person.prototype = {
? getName: function() {
??? return this.name;
? },
? getAge: function() {
??? return this.age;
? }
}

?// 实例化对象
var alice = new Person('Alice', 93);
var bill = new Person('Bill', 30);

// 修改类,再为其添加一个方法
Person.prototype.getGreeting = function() {
? return 'Hi ' + this.getName() + '!';
};

// 修改特定的实例
alice.displayGreeting = function() {
? alert(this.getGreeting());
}

var o = new Object();

o.name = "langsin";

alert(o.name);

delete o.name;

alert(o.name);