JavaScript this特性,静态方法 和实例方法,prototype

<script type="text/javascript">
    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(); /* aa */
    window.show(); /* I am window */

    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();  //static method
    //staticClass.instanceMethod();  //语句错误,  无法运行
    new staticClass().instanceMethod(); //必须进行实例化才可以调用  instance method

    //动态原型方法的精髓在于使用 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 处不输出是因为它是静态属性, 不是实例属性。*/
</script>

ref:http://sblig.iteye.com/blog/1542896

时间: 2024-08-08 09:54:27

JavaScript this特性,静态方法 和实例方法,prototype的相关文章

javascript高级特性

01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_对象_定义函数对象09_对象_内建对象10_原型_为函数对象增加属性或方法11_原型_利用函数对象本身重写原型12_继承_函数对象之间的继承13_继承_普通对象之间的继承 javascript高级特性(面向对象): * 面向对象:   * 面向对象和面向过程的区别:     * 面向对象:人就是对象,年龄\

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

JavaScript Oriented[探究面向对象的JavaScript高级语言特性]

JavaScript Oriented 探究面向对象的JavaScript高级语言特性 Prologue . JavaScript Introduce 1.  JS Abstract JavaScript是由Netscape公司工程师Brendan Eich研发的脚本语言,经过推广和流行,兼容ECMA-262标准,至今用于描述HTML网页行为.(前端验证,检测,响应,触发,控制等动态行为) Knowledge Tree 2.     About Document 本文涉及到的概念有JavaScr

静态方法、实例方法和虚方法的区别

基础知识 对于面向对象的语言来说,所有类型都是从System.Object类型派生,正是由于这个原因,保证了每个类型都有一组最基本的方法,也就是从他们的父类System.Object继承古来的方法,Object的定义如下面的代码所示,System.Object所定义的基本方法中基本包含了CLR所有的方法类型,静态方法(Static修饰,属于类成员).虚方法(Virtural修饰,属于实例成员).实例方法(普通的方法,属于实例成员).可能会有人说还有抽象方法,其实抽象方法最后的编译也是一个虚方法.

使用JavaScript OOP特性搭建Web应用

最近,我面试了一个有五年 Web 应用程序开发经验的软件开发人员.四年半来她一直在从事 JavaScript 相关的工作,她自认为 JavaScript 技能非常好,但在不久之后我就发现实际上她对 JavaScript 知之甚少.话虽这样说,但我确实没有责备她的意思.JavaScript 真的是很有趣.很多人(包括我自己,直到最近!)都认为自己很擅长 JavaScript 语言,因为他们都知道 C/C++/C#,或者有一些以前的编程经验. 在某种程度上,这种假设并不是完全没有根据的.用 Java

Js类的静态方法与实例方法区分以及jQuery如何拓展两种方法

上学时C#老师讲到对象有两类方法,静态方法(Static)和实例方法(非Static),当时不理解静态是为何意,只是强记. 后来从事了前端的工作,一直在对类(即对象,Js中严格来说没有类的定义,虽众所周知,这里还是赘述一番,以免产生歧义)的操作上,严重缺乏整体概念,最近看extetnd中再次提到拓展静态方法与实例方法,故而再次百度,才幡然领悟,其实一直有用,只是不知其专业术语呀,哈哈~ 静态方法,属于类的方法,即类可以直接调用的方法.为类所有实例化对象所共用(但不能用实例对象之间调用),所以静态

【Java初探外篇02】——关于静态方法与实例方法

在Java的学习中,我们知道,方法的使用是不可或缺的重要部分,在我们编写第一个Java程序hello world的时候,我们就要开始使用主方法main():它就是一个静态方法(static method) . public class sty_01{ //主方法main() public static void main(String[] args){ system.out.println("hello world!"); } } 那么接下来我们具体学习下静态方法与实例方法的区别. 静

程序员过关斩将--来自于静态方法和实例方法的联想翩翩

这两周没有妹子来找我问问题,有点小伤感,所以耽误更新了.哈哈,别当真,因为菜菜这两周周末都有事(你可以认为去公司加班了),实在是没有精力,忘各位见谅!! 以下为菜菜自己观点,不代表任何妹子的观点,请轻喷 ◆◆ 面向对象 ◆◆ 作为一个久经考验并得到业界肯定的编程思想莫过于面向对象编程思想了. 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工

iOS开发——语法篇OC篇&amp;静态方法与实例方法

静态方法与实例方法 方法是类的行为,写在接口和实现两个文件中.在接口部分声明方法,在实现部分实现方法. 1.类方法与实例方法 Objective-C中的类可以声明两种类型的方法:实例方法和类方法.实例方法就是一个方法,它在类的一个具体实例的范围内执行.也就是说,在你调用一个实例方法前,你必须首先创建类的一个实例.而类方法,比较起来,也就是说,不需要你创建一个实例. +表示类方法,就是类调用方法,不依赖与任何对象的方法,类似于c语言的static关键字 static函数.-表示是实例(对象)方法,

java 静态方法和实例方法的区别

静态方法和实例方法的区别主要体现在两个方面:   在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式.而实例方法只有后面这种方式.也就是说,调用静态方法可以无需创建对象.   静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法:实例方法则无此限制.   下面几个例子展示了这一区别.   1.调用静态方法示例. //-----------hasStaticMethod.j