`

JavaScript 学习笔记十四 this特性,静态方法 和实例方法,prototype

 
阅读更多

 

        function logs(str){document.write(str+"<br />")}
        //利用“this 指向函数调用者”的特性,可以实现链式调用。jQuery 中大部分都是链式调
        var oName = {name : "aa",age:999};
        window.name = "I am window";
        function showName(){
            logs(this.name);
        }
        oName.show = showName;  window.show = showName;
        oName.show(); /* a */          window.show();  /* I am window */
        //eg. 链式调用    模仿c++的 cout 输出函数cout<<aa<<bb<<cc<<endl;
        oName.showName = function(){
            logs(this.name);
            return this;// JavaScript 中的“this”是函数上下文,不是在声明时决定的,而是在调用时决定的
        };
        oName.showAge = function(){
            logs(this.age);
            return this;
        }
        oName.showName().showAge();//  aa  999

        //方法  静态方法  实例方法   java 中的一样的特性 实例方法必须声明对象,对象才可以调用
        function staticClass(){};                                                       //声明一个类
        staticClass.staticMethod = function(){ logs("static method")};               //创建一个静态方法
        staticClass.prototype.instanceMethod  = function(){ logs("instance method")} //创建一个实例方法
        staticClass.staticMethod();
        //staticClass.instanceMethod();  //语句错误,  无法运行
        new staticClass().instanceMethod(); //必须进行实例化才可以调用

        //动态原型方法的精髓在于使用 prototype 声明实例方法,使用 this 声明实例属性
        function Car(){
            this.color = "none";                           //实例实属
            if( typeof Car._initialized == "undefined"){
                Car.prototype.showCar = function(){          //实例方法
                    logs(this.color);
                }
            }
            Car._initialized = true; //静态属性 ? 实例属性?
        }
        logs(Car.color);          //undefined
        logs(Car._initialized); //undefined  ?
        var car = new Car();
        logs(car.color);         //none
        logs(Car._initialized); //true      ?
        logs(car._initialized);//undefined  ?
        car.showCar();           //none
       //*
        Car._initialized是静态属性
        1处报错,是因为你的Car._initialized属性的赋值是在类里面,JS是解释到哪儿执行到哪儿,
        正因为如此,当有Car的实力产生的时候,静态属性_initialized被赋值,
        所以2处为true,3处不输出是因为它是静态属性,不是实例属性。*/
分享到:
评论
1 楼 sblig 2012-05-28  
  
         //了解DOM
        function onLoad(){
            var oHtml = document.documentElement; //获取都HTML对新
            var oBody = oHtml.lastChild;            //获取到 body 对象  oHtml.firstChild;获取的是 head对象
            var oDiv = document.createElement("div");//创建div对象
            var oText = document.createTextNode("Hello DOM");//创建一个文本节点
            oDiv.appendChild(oText);                   //将文本节点放到 div 对象中
            oBody.appendChild(oDiv);                   //将div对象(带有文件节点)放到body对象中
        }
        //动态语音 -------eval
        var sJson = "{name:'ziqiu.zhang'}";
        eval("var oName="+sJson);     // eval()方法可以将 JSON 格式的字符转化为 JavaScript 对象
        logs(oName.name);

        logs(eval("5+2")); //输出“7”

相关推荐

    JavaScript学习笔记

    实例方法是通过构造函数的`prototype`属性添加的方法,必须先创建实例后才能调用。 ```javascript StaticClass.prototype.instanceMethod = function () { alert("实例方法"); }; var instance = new Static...

    很有价值的javascript学习笔记

    ### JavaScript 学习笔记知识点详解 #### 一、JavaScript 基础概念 - **JavaScript 与 Java 的区别**:JavaScript 和 Java 是两种完全不同的编程语言。Java 是一种静态类型语言,而 JavaScript 是动态类型的解释性...

    Javascript 面向对象程式学习笔记收藏

    总结,JavaScript的面向对象编程主要涉及到构造函数、属性、方法、this关键字、原型链以及封装和继承等概念。理解这些基础是编写高效、可维护的JavaScript代码的关键。在实践中,开发者还需要考虑作用域、闭包、异步...

    JavaScript语言基础知识点总结十张图

    本文将基于“JavaScript语言基础知识点总结十张图”这一主题,深入探讨JavaScript的基础概念、语法特性以及核心知识点。 1. **变量与数据类型** JavaScript有七种数据类型:Undefined、Null、Boolean、Number、...

    javascript学习笔记(五)原型和原型链详解

    在JavaScript中,当为实例变量和方法添加新的方法和属性时,如`o1.a.push(1)`和`o1.fn={}`,由于数组和函数是引用类型,这意味着`o1`和`o2`的实例属性实际上是各自独立的副本,而不是共享同一引用。这可能导致内存...

    EXTJS学习笔记

    ### EXTJS学习笔记 #### 一、EXTJS基础概念与命名空间管理 **EXTJS** 是一款基于JavaScript的开源框架,主要用于开发复杂的企业级Web应用。它的设计目标是提高前端开发效率并简化复杂的用户界面(UI)开发过程。在...

    JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性

    ECMAScript 5(简称ES5)是ECMAScript的一个重要版本,带来了许多新特性,这些新特性在《JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性》中被详细讨论。 ES5相对于之前版本,如ECMAScript 3(简称...

    jQuery-1.3.2 学习笔记(转).txt

    ### jQuery-1.3.2 学习笔记 #### 一、概述 jQuery 是一个快速、简洁的 JavaScript 库,使用户能更方便地处理 HTML 文档、选择 DOM 元素、制作动画效果,并为应用程序添加 AJAX 交互。版本 1.3.2 在 2009 年 2 月...

    javascript-learning-road:js学习笔记

    3.constructer里面的这个指向实例对象,方法里的this指向这个方法的调用者。 新执行过程 1.在内存中创造一个空对象。 2.让这个指向这个空对象。 3.执行构造函数里的代码,给这个新对象添加属性和方法。 4.返回这个...

    Nodejs学习笔记之入门篇

    我们可以通过构造函数创建"类",如`Person`,并为其添加静态方法`staticSay`和实例方法`sayHi`。实例化`Person`时,`sayHi`方法可以通过原型链继承。例如: ```javascript var Person = function(name) { this....

    Extjs学习笔记之八 继承和事件基础

    `Person.prototype`包含了可以被所有`Person`实例共享的方法,如`print`、`showAge`和`showName`。 `Ext.extend`方法是ExtJS中用于实现继承的核心函数。它接受三个参数:子类构造函数、父类构造函数和覆盖父类的...

    class_notes:五十一堂课笔记

    "class_notes:五十一堂课笔记"是一份全面而深入的学习资料,旨在帮助开发者从初级到高级,系统地掌握JavaScript的核心概念和技术。 一、基础篇 1. 变量与数据类型:JavaScript支持动态类型,包括基本类型(Number, ...

    Eloquent-JavaScript-Notes

    "Eloquent-JavaScript-Notes"很可能是这本书的注释版或者学习笔记,包含了作者或读者在阅读过程中对书中的概念、示例和技巧的解释和拓展。 JavaScript是一种轻量级的解释型编程语言,主要用于网页和网络应用开发。...

    esteemedio.github.io

    Esteemedio.github.io-develop可能涵盖以上部分或全部知识点,并通过实例代码、教程或笔记等形式呈现,对于学习和提升JavaScript技能非常有帮助。同时,利用GitHub Pages发布,也意味着该网站可能涉及到Git版本控制...

Global site tag (gtag.js) - Google Analytics