Javascript函数及作用域说明

来源:互联网 发布:淘宝收二手手机 编辑:程序博客网 时间:2024/05/31 18:35
1.实现命名空间,避免名称冲突
 -实现一个匿名函数
 -在匿名函数里实现一个 自定义函数(相当于一个类)
 -设置自定义函数的属性及方法
 -new一个自定义函数(实例化)并指向外部一个名称

(function () { //这里实现一个匿名函数
  var _NS = function () { }  //在匿名函数里实现一个 自定义函数
    _NS.prototype.select = function (selector,context) {  }
    _NS.prototype.isArrayLike=function(obj){ }
    _NS.prototype.html = function (obj,value) { }
    window.NS = new _NS();  //实例化这个这定义函数,并将其与windows类绑定
})();//用括号括起来表示函数定义后立即执行

用的时候,直接用  window.N.select();

2.javascript 函数作用域
2.1 私有变量、函数 
function Obj(){
  var a=0; //私有变量
  var fn=function(){ //私有函数 }
}
这样在函数对象Obj外部无法访问变量a和函数fn,它们就变成私有的,只能在Obj内部使用,即使是函数Obj的实例仍然无法访问这些变量和函数
var o=new Obj();
console.log(o.a); //undefined
console.log(o.fn); //undefined

2.2 静态变量、函数
function Obj(){  }
Obj.a=0; //静态变量
Obj.fn=function(){ //静态函数}
当定义一个函数后通过 “.”为其添加的属性和函数,通过对象本身仍然可以访问得到,但是其实例却访问不到,这样的变量和函数分别被称为静态变量和静态函数
console.log(Obj.a); //0
console.log(typeof Obj.fn); //function
var o=new Obj();
console.log(o.a); //undefined
console.log(typeof o.fn); //undefined

2.3 实例变量、函数
function Obj(){
  this.a=[]; //实例变量
  this.fn=function(){ //实例方法}
}
在面向对象编程中除了一些库函数我们还是希望在对象定义的时候同时定义一些属性和方法,实例化后可以访问,JavaScript也能做到这样
console.log(typeof Obj.a); //undefined
console.log(typeof Obj.fn); //undefined
var o=new Obj();
console.log(typeof o.a); //object
console.log(typeof o.fn); //function

2.4 prototype内属性、方法是能够共享
function Person(name){ this.name=name;}
Person.prototype.share=[];
Person.prototype.printName=function(){ alert(this.name);}
无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,而prototype也是一个对象,会自动获得一个constructor属性,该属性正是指向Person对象。  
var person1=new Person('Byron');
var person2=new Person('Frank');

person1.share.push(1);
person2.share.push(2);
console.log(person2.share); //[1,2]
person1.share=0;
console.log(person1.share); //0而不是prototype中的[]
0 0
原创粉丝点击