学习javascript权威指南1

8.3作为数据的函数
function squere(){return x*x}
创建一个新的函数对象,并且把这个函数对象赋给了变量square
Array.sort()排序
8.3作为方法的函数
任何用作方法的函数都被有效地传递了一个隐士的参数,即调用函数的对象。
8.5构造函数
8.6函数的属性和方法
8.6.1属性length
只读属性,返回的是函数需要的实际参数的数目
8.6.1属性prototype
它引用的是预定义的原型对象
8.6.3定义函数自己的属性
function uniquenInteger(){
return uniqueInteger.counter++;
}
8.6.4方法apply()和call()
call()和apply()的第一个参数都是要调用的函数的对象,在函数体内这一参数是关键字this的值
函数f()
f.call(o,1,2);
f.apply(o,[1,2]);
要找到一个数字数组中的最大数字,可以用apply()方法把数组元素传递给Math,max()函数:
var biggest = Math.max.apply(null,array_of_number);
8.7工具函数示例
8-3 对象工具函数
function getPropertyNames(/* object*/ o ){
var r = [];
for(name in o ) r.push(name);
return r;
}

function copyProperties(/* object*/ from,/* optional object */ to  ){
if(!to) to = {};
var r = [];
for(p in from ) to[p] = from[p];
return to;
}

function copyUndefinedProperties(/* object*/ from,/* object */ to  ){
for(p in from ){
if(!p in to) to[p] = from[p];
}
}
8-4 数组工具函数
8-5 用于函数的工具函数
8.8函数作用域和闭包
8.8.1词法作用域
8.8.2调用对象
8.8.3作为名字空间的调用对象
8.8.4作为闭包的嵌入函数
8-6使用闭包的私有属性
uniqueID = (function(){
var id = 0;
return function(){return id++;};
})();


function makeProperty(o,name,predicate){
var value;
o["get" + name] = function(){return value;};
o["set" + name] = function(v){
if(predicate && !predicate(v)
throw "set" +name +":invalid value " + v;
else
value = v;

};

}

var o = {};
o.setName("Frank");
print(o.getName());
o.setName(0);
170看

8.9Function()构造函数
使用Function()构造函数来创建一个函数的例子

var f = new Fuction("x","y","return x*y;");
基本等于
function f(x,y){return x*y ;}

关于Function()构造函数,理解如下几点很重要
关于Function() 函数非常重要的一点就是,它所创建的函数并不使用词法作用域,相
反,他们总是当作顶层的函数一样来编译。
var y = "global";
function costructFunction(){
var y = "local";
return new Function("retutn y ");
}
alert(costructFunction()());  //displays "global"

9.1构造函数

设计来和new运算符一起使用的函数叫做构造函数.

构造函数的工作时初始化一个新创建的对象,设置在使用对象前需要设置的所有属性。

function Rectangle(w,h){
this.width = w;
this.heigth = h;
}

var rect1 = new  Rectangle(2,4);

9.2原型和继承

Object.hasOwnProperty()来区分继承的属性和常规的属性

9.2.1读取和写入继承的属性
属性继承只在读取属性值的时候发生,而当写入属性值的时候不会发生
9.2.2扩展内建类型
像Strigng 和Date这样的内建的类,也有原型对象,并且可以为他们赋值.
String.propertye.endWith = function(c){
return (c==this.charAt(this.length-1))
}

if(!Function.proptotype.apply){
Function.prototype.apply = function(object,parameters){
var f = this;
var o = object|| window;
var args = parameters || [];
o._$_apply_$_ = f;
var stringArgs = [];
for(var i=0;i<args.length;i++){
stringArgs [i] = "args ["+i+"]";
}
var arglist = stringArgs.join(",");
var methodcall = "o._$_apply_$_("+arglist+");";
var result = eval(methodcall);
delete o._$_apply_$_ ;
return result;

}
}
9.3在javascript中模拟类
9.3.1实例属性
9.3.2实例方法
实例方法和this
9.3.3类属性
9.3.4类方法
类方法是和一个类而不是类的一个实例先关的方法。
要在javascript中定义一个类方法,只要让相应函数成为构造函数
的一个属性就可以了。
9.3.5例子:Circle类
9.3.7私有成员
9.4通用对象模型
9.4.1 toString()方法
9.4.2 valueOf()方法
9.4.3 比较方法
9.5超类和子类





















你可能感兴趣的:(JavaScript)