一些基础概念:
#1 JavaScript 对象其实就是属性的集合。属性由键值对组成。通过[属性名]这种形式则总是可以保证正确性。
#2 函数:?函数本身也是对象。
function func(id){};
相当于:
var func = function(id){};
#3?this?表示当前上下文,即调用者的引用。
#4 词法作用域?即是在定义的时候就确定下来了。
#5 scope?在执行一个函数时,函数的参数和其局部变量会作为调用对象的属性进行存储
#6 call & apply
#7 ?由于构造函数定义了一个对象的类,所以属性constructor在有助于确定给定对象的类型.如,可以使用如下代码来确定一个未知对象的类型:if ((typeof o == "object") && (o.constructor == Date)),也可以用instanceof运算符:if ((typeof o == "object") && (o instanceof Date))
#8?对象的引用机制:对象不会被复制,只能通过引用来传递。
var recordDefParams = [];
recordDefParams[0] = {name:'id',type:'date'}; recordDefParams[1] = {name:'version'}; recordDefParams[recordDefParams.length] = {name:'deleted'}; function func(recordDefParams){ for (var i = 0, nLen = recordDefParams.length; i < nLen; i++) { var obj = recordDefParams[i]; if (obj.type == 'date' && !obj.dateFormat) { obj.dateFormat = 'xxx-xx-x'; } } return recordDefParams; } console.dir(recordDefParams); console.log('==========================='); console.dir(func(recordDefParams));?
#9
?
?
function addr(street, xno){ console.log(this); this.street = street || 'beijinglu'; this.xno = xno || '1 hao'; this.toString = function(){ return 'Street:' + this.street + ' xno:' + this.xno; }; }; var core1 = new addr(); console.log(core1.toString()); var core2 = new addr('北京路','一号'); console.log(core2.toString());?
?
//动态构建新的匿名对象 function point(x,y){ this.x = x; this.y = y; return {'x':x,'y':y}; } var a = point(3,4); console.dir(a); for(var key in a ){ console.log(key); console.log(a[key]); }?
?
After read the blog of "JavaScript Core chapter 10 .writer the coding below for testing.
<html> <head> <title> Js core </title> <script type="text/javascript"> //原型链 var base = { name : 'Mark', getName : function(){ return this.name; } }; var ext1 ={ id :'0', __proto__ :base }; var ext2 ={ id : '9', __proto__ : base }; //console.log(ext1.getName()); //构造器 function Task(id){ this.id = id; }; Task.prototype.status = 'defalt_begin'; Task.prototype.execute = function(args){ return 'execute task_[' + this.id + ']' + this.status + ':' + args; }; var task1 = new Task(1); var task2 = new Task(2); task1.status = 'activing'; task2.status = 'end...'; //console.log(task1.execute('task_1')); //console.log(task2.execute('task_2')); //this understander var global = this; var tom = { name : 'tom', id : '1', getInfo: function(){ console.log(this.name + ':' + this.id); } } var jetty = { name : 'jetty', getInfo : tom.getInfo //等同于 //getInfo:function (){ console.log(this.name + ':' + this.id);} 在跑构造的时候就创建好了。 } tom.getInfo(); jetty.getInfo(); global.getInfo = tom.getInfo; global.getInfo(); </script> </head> <body> js core chapter 10 & 11. </body> </html>
? ?all : 给全局对象动态的添加一个属性。