7天入门JavaScript,第五天
对象
JavaScript 中除了数字,字符串,布尔值,null和undefined之外都是对象。
对象分类
内置对象:数组 ,函数 , 日期 , 正则表达式...
宿主对象: window ...document...(也可以看作内置对象)
自定义对象,
创建对象
对象字面量方式:
var object = {id:1,name:‘xxx‘,walk:function(){}};
new 构造函数
var object = new Object();
自定义的构造函数,它的原型是Object
function fun() {
}
//fun.prototype = Function;
alert(typeof fun.prototype); // object
Object.create();
-------------------------------------------
function fun() { } alert(fun); // 这个fun指的是 fun 对应的function对象 alert(fun()); // 这个 fun() 只得是调用fun之后的返回值 alert(new fun()); //这个是调用fun构造函数 返回fun构造函数创建的对象 function fun() { age = true; // 如果不加this,它就是全局的 // 如果后面声明了var age 那这个就是局部变量了,因为函数的作用域会将所有var"提前" this.age = "fun"; //var age = 123; } alert(new fun().age); alert(age);
---------------------------------------------------------------------------------
prototype
function fun() {
}
上面这段代码 等同于 var fun = new Function(); fun.prototype = new Object(); (prototype 是function对象的属性,不是自定义函数创建的对象的属性)
这句话,本质是创建了一个fun的function对象。就像类加载之后创建了这个类的class对象一样。这里的function对象等同与class对象。
原型是fun的function对象的一个属性。所以所有的xxx产生的对象都出自同一个function对象,那么也就共享同一个prototype属性。
如果不用原型会有什么问题?
每一次创建一个对象,如 var f1 = new fun(); var f2 = new fun(); fun里面的字面量,都会重新计算(重新构造对象,因为在javascript里面方法就是对象)。
方法是可以重用的,但是如果有成员变量那么会造成资源共享问题,只要我们不声明成员变量那么资源共享问题是可以避免的。
用原型的目的: 把函数当方法,仅仅当方法用, 不当对象用。因为方法没有成员变量一说,只有对象才有成员变量。
原型链上的属性不允许赋值。,只有通过查询属性才会体会到继承的存在
fun2.prototype.birth = "abc"; alert(new fun2().birth); var fo = new fun2(); alert(fo.birth); fo.birth = "xxxxx"; // 不能赋值给原型链上的birth属性, var fo2 = new fun2(); alert(fo2.birth); // abc
---------------------------------------------------------------------------------
JSON.stringify(o); 将o对象转为string类型
JSON.parse(""); 将string转称对象类型
---------------------------------------------------------------------------------
(function() { alert("hi"); }()); 匿名函数,外面一定要包一层括号。
test();
function test() {
var xxx = function() { // 这种方式不会报错。 赋值语句,后面的function会执行
alert("hello");
}();
function() { //声明语句
alert("www");
}();
}
闭包
原理,每次调用JavaScript函数时,都会为之创建一个新的对象用来保存局部变量,把这个局部变量保存到作用域链中。
如果有嵌套函数并在这个作用域链中,这个嵌套函数可以访问那个保存局部变量的对象。
var increment = (
function() {
var count = 0;
return function() {
return ++count;
}
// 理解为在这里执行的嵌套函数
}()
);
for(var i=0;i<10;i++) {
document.writeln(increment()); // 理解为,这个嵌套函数在声明之后下一行执行。
};
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。