匿名函数
- 小括号
表示指向一个空间 - 小括号指向函数,实现调用匿名函数
(function (){
console.log(666);
})();
var a = (function (num){
if(num>1)
return num*arguments.callee(num-1);
return num;
})(3);
console.log(a);
对象
- 对象的直接声明(每对键值对后都有个逗号,最后一对可以不加逗号)
- key:value
1.字母(加引号,不加引号)
2.数字(加引号,不加引号)
var person = {name : "karen", // 键值对 key:value
age : 46,
tool:function(){} //,
}
var person = {name : "enco", age : 18}
var a = person.name;
var b = person["name"];
var arr = [1,2,3,4]
console.log(arr);
person.tool = 18;
var person = {width: 200}
console.log(person.height); //undefined
var person = {width: 200}
person.height = 30; // 会声明这个没有的空间并初始化
常见创建对象的方式
var person = new Object();
var person = {};
function person(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
return obj;
}
person("karen",18);
function person(name,age){
this.name = name;
this.age = age;
}
var p1 = new person("karen",18); //new 开辟一个对象空间,this指向对象空间
console.log(p1.name);
this
prototype
- prototype 属性使使用者有能力向对象添加属性和方法。(这里的对象指没有实例化的对象,及类:代码中的objecrt)
object.prototype.name=value;
function employee(name,job,born){
this.name=name;
this.job=job;
this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
employee.prototype.salary=null;
数组的创建
var a = [1,"qwe",!5];
var a = new Array();
js中的new
JS构造函数及new运算符
- prototype 对f1是不可见的,也就是说,f1不会查找prototype中的属性和方法。
function f(){}
f.prototype.foo = "abc";
console.log(f.foo); //undefined
- prototype的主要作用就是继承。 通俗一点讲,prototype中定义的属性和方法都是留给自己的“后代”用的,因此,子类完全可以访问prototype中的属性和方法,proto的作用就是保存父类的prototype对象,JS在通过new 表达式创建一个对象的时候,通常会把父类的prototype赋值给新对象的proto属性,这样,就形成了一代代传承。
function f(){}
f.prototype.foo = "abc";
var obj = new f();
console.log(obj.foo); //abc
js闭包
干货分享:让你分分钟学会JS闭包
- 当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但又不会“污染”全局的变量时,就可以用闭包来定义这个模块。