js之作用域和面向对象
作用域
- JavaScript以函数为作用域
- 函数的作用域在函数未被调用之前,已经创建
- 函数的作用域存在作用域链,并且也是在被调用之前创建
示例一
    xo = "alex";
    function func(){
        // var xo = 'eric';
        function inner(){
            // var xo = 'tony';
            console.log(xo);
        }
        inner()
    }
    func()
结果
Alex
示例二
        xo = "alex";
        function func(){
            var xo = 'eric';
            function inner(){
                console.log(xo);
            }
            return inner;
        }
        var ret = func()
        ret()
结果
eric
示例三
        xo = "alex";
        function func(){
            var xo = 'eric';
            function inner(){
                console.log(xo);
            }
            var xo = 'tony';
            return inner;
        }
        var ret = func()
        ret()
结果
tony
因为词法分析结束之后AO链上只有AO={xo:eric},执行的时候
- xo = 'eric' 2. xo = 'tony' 再次ret()进行调用的时候就输出了tony
面向对象
        function foo(){
            var xo = 'alex';
        }
        foo()
        ================================
        function Foo(n){
            this.name = n;
            this.sayName = function(){
                console.log(this.name);
            }
        }
        var obj1 = new Foo('we');
        obj1.name
        obj1.sayName()
        var obj2 = new Foo('wee');
        obj2.name
        obj2.sayName()
每次新建一个实例都会在内存中创建方法sayName(),sayAddress().这无疑是低效的,解决的方法就是将这些可以共享的方法保存在原型对象中,从而让每个实例都继承这些属性或者方法.可有使用原型解决。
    原型:
        function Foo(n){
            this.name = n;
        }
        # Foo的原型
        Foo.prototype = {
            'sayName': function(){
                console.log(this.name)
            }
        }
        obj1 = new Foo('we');
        obj1.sayName()
        obj2 = new Foo('wee');
// 我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个对象;
// 用途:包含可以由特定类型的所有实例共享的属性和方法;
// 理解:prototype是通过调用构造函数创建的那个对象的原型对象;
// 使用原型的好处是可以让所有对象实例共享它所包含的属性和方法;
// 也就是说,不必在构造函数中定义对象信息(属性/方法),而是可以直接将这些信息添加到原型中;
构造函数、原型对象和实例对象关系图如下:

- 因为最根上的object拥有一个prototype属性,而js中所有的对象又都继承自object,所以js中所有的对象都拥有一个prototype属性,而在js中函数也是对象,所以js中每个函数也都有一个prototype属性。 
- 而每一个prototype属性又会获得一个constructor属性 
- 该constructor属性有一个隐含的指针,指向了prototype属性所在的函数。 
- 当通过new Person() 创建一个对象实例后,该实例包含一个隐含的指针,指向了Person.prototype 

js之作用域和面向对象的更多相关文章
- JS 之作用域链和闭包
		1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(nam ... 
- [Python自学] day-16 (JS、作用域、DOM、事件)
		一.JS中的三种函数 1.普通函数 function func(){ console.log("Hello World"); } func() 2.匿名函数 setInterval ... 
- js词法作用域规则
		function foo() {console.log( a ); // 2不是3} function bar() {var a = 3;foo();} var a = 2;bar(); js中的作用 ... 
- js词法作用域
		作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ... 
- 浅谈 js eval作用域
		原文:浅谈 js eval作用域 就简单聊下如何全局 eval 一个代码. var x = 1; (function () { eval('var x = 123;'); })(); console. ... 
- JS的作用域浅谈
		作为前端小白,总是对JS的作用域有点迷糊,这里稍微研究了一下分享出来,希望和我一样的小白可以学的一点 首先是一个经典的例子: var a=0,b=0; for (var i = 0; i < 1 ... 
- JS 函数作用域及变量提升那些事!
		虽然看了多次js函数作用域及变量提升的理论知识,但小编也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷) ... 
- js私有作用域(function(){})(); 模仿块级作用域
		摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: f ... 
- 浅谈js变量作用域
		变量的作用域也是前端面试题常考的一个问题,掌握下面几个规律可以帮你更好的理解js的作用域. 1.作用域优先级遵循就近原则,函数内部的作用域优先级大于外部 var a=456; var b=111; f ... 
随机推荐
- mvc-1
- String类中的一些函数使用方法
			最常用的就是Length()函数了,求字符串的长度 String s="";int i=s.length();i结果为0. 如果是String s=null;int i=s.len ... 
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)
			转自http://blog.csdn.net/bluishglc/article/details/7585965 对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统 ... 
- CSS实时编辑显示
			方法 CSS实时编辑显示:通过display:block让css文本显示出来,再加上contentEditable使文本可编辑 <!DOCTYPE html> <html> & ... 
- Unity3D Sprite Draw Call合批规则
			只要材质相同,并Sprite在同一Atlas里,就可以合批. 不论Sorting Layer不同,还是Sorting Order不同. 材质相同的两个不同Sorting Order之间插入一个不同材质 ... 
- JS判断是否是IE浏览器
			前最短的IE判定借助于IE不支持垂直制表符的特性搞出来的. var ie = !+"\v1"; 仅仅需要7bytes!参见这篇文章,<32 bytes, ehr ... 9, ... 
- Robot Framework--13 RFS+AutoItLibrary测试web上传下载
			转自:http://blog.csdn.net/tulituqi/article/details/21888059 Selenium2library在我们实际测试web页面的时候基本上已经够用了,不过 ... 
- xhprof安装使用
			安装: 到pecl官网下载xhprof的最新版:http://pecl.php.net/package/xhprof wget http://pecl.php.net/get/xhprof-0.9.4 ... 
- php栈数据结构和括号匹配算法
			栈,体现的是后进先出,即LIFO.队列,体现的是先进先出,即FIFO. 栈 array_pop() //尾出 array_push() //尾进 或 array_shift()//头进 array_u ... 
- winform只能有一个实例运行且打开已运行窗口
			static class Program { private static Mutex onlyOne; [STAThread] static void Main() { onlyOne = new ... 
