面向对象---函数
闭包和继承
自运行函数也叫自调用函数,即函数声明之后,即刻执行。
匿名函数,就是没有定义函数名的函数。
场景:仅执行一次的函数。
特点:自运行的匿名函数可以有效的保证在页面上写入JavaScript,而不会造成全局变量的污染。
写法:
可直接写
~function(){console.log("Hello world");}(); +function(){console.log("Hello world");}(); -function(){console.log("Hello world");}(); !function(){console.log("Hello world");}(); delete function(){console.log("Hello world");}(); void function(){console.log("Hello world");}();
前面需要数据
console.log(1*function(){return 7};); console.log(16/function(){return 2};); console.log(9%function(){return 10};);
常用的写法:
(function(){console.log("hello world");})();
(function(){console.log("hello world");}())
闭包:
闭包,是指在函数外部访问函数作用域中变量的函数。
闭包,可以访问函数内部的局部变量,并让其长期驻留内存。
function a(){ var num = 1; return function(){ return ++num ; } } var fun = a(); alert(fun());//2 alert(fun());//3
、、、、、、、、、、、、、、、
原型
JavaScript中每个对象有prototype(原型)属性。
JavaScript中对象的prototype属性的解释是:返回对象类型原型的引用。
比如我们有一个函数叫做Foo,这个Foo是由其原型构造出来的。
function Foo()------>prototype----->Foo.prototype
Foo.prototype----->constructor---->function Foo()
Foo函数是由Foo函数的原型对象构造出来的。
prototype 是一个指针,指向一个对象。这个对象的用途是,包含所有实例共享的属性和方法。
所有通过同一个构造函数创建的实例对象,都会共享同一个prototype。
原型诞生的意义就是可以实现代码复用。
就是把需要共享的属性方法放到一个对象里,这个对象就是原型(对象)。
function Person(_name){ this.name = _name; this.age = 19;//使用p1.age访问时age属性从构造函数内容实例查询起。如果没有就向原型prototype属性上查询。 } alert( Person.prototype ); // object Person.prototype.age = 18; // 给原型对象增加属性 var p1 = new Person("张三"); alert(p1.name+", "+p1.age); //张三, 18 var p2 = new Person("李四"); alert(p2.name+", "+p2.age); //李四, 18
//p2_proto_age//查询原型下的age属性。
instanceof运算符
用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。
两者的区别的主要是:
A.isPrototypeOf(B) 判断的是A对象是否存在于B对象的原型链之中。
A instanceof 原型链B判断的是B.prototype是否存在与A的原型链之中。
hasOwnProperty
在实例中是否包含该属性,不在原型中查找该属性。
function Person(_name){ this.name = _name; } var p1 = new Person("a"); alert( p1.hasOwnProperty('name') ); // true