zoukankan      html  css  js  c++  java
  • 了解javascript编程中的Prototype(原型)

    日期:2012-5-16  来源:GBin1.com

    了解javascript编程中的Prototype(原型)

    当你定义javascript方法的时候,会产生一些预定义的属性,其中一个比较让人迷惑的属性就是prototype。在本文中,我们将详细介绍什么是Prototype,并且为什么使用prototype。

    什么是prototype?

    prototype属性初始时是一个空的对象,可以添加对象 ,你可以添加任何对象到它里面去。

    var myObject = function(name){
        this.name = name;
        return this;
    };
    console.log(typeof myObject.prototype); // object
    myObject.prototype.getName = function(){
        return this.name;
    };

    在以上这段代码中,我们创建了一个方法,但是如果我们调用myObject(),将会返回window对象,因为它被定义在全局范围中。 this将会返回全局对象,因为没有被实例化。

    console.log(myObject() === window); // true

    秘密的连接

    每一个javascript中的对象都有一个秘密属性。 

    在我们继续之前,我想讨论一下决定prototype工作方式的“秘密”连接。

    每一个javascript对象在定义或者实例化的时候都会添加一个秘密的属性,叫__proto__,这决定了prototype链如何被访问。然而,在你的应用中访问这个__proto__属性绝对不是一个好主意,因为不是所有浏览器都可访问。

    __prototype__ 属性在一个对象的prototype中不应该被弄混了, 因为它有两个分开的属性;意味着他们都是手拉手来使用的。对于弄清楚这个很重要。因为最开始的时候肯定比较令人迷惑。 那究竟什么意思呢? 这里我们解析一下。 当我们创建myObject方法时,我们定义了一个Function类型的对象。

    console.log(typeof myObject); // function

    如果你不知道的话, Function是一个javascript预定义的对象,这样的话,拥有自己的属性(例如,length和arguments)和方法(例如,call和apply)。这意味着,在javascript的引擎中,这里有类似如下代码的部分:

    Function.prototype = {
        arguments: null,
        length: 0,
        call: function(){
            // secret code
        },
        apply: function(){
            // secret code
        }
        ...
    } 
    当然可能没有这么简单;不过这里只是演示prototype的链式如何工作的。
    因此当我们定义myObject为一个方法并且提供一个参数name;但是并不设置其它属性和方法,例如length,和call,那么如下代码为什么可以工作?
    ...
    欢迎访问GBin1.com
  • 相关阅读:
    mysql命令集锦
    linux 删除文件名带括号的文件
    linux下的cron定时任务
    struts2文件下载的实现
    贴一贴自己写的文件监控代码python
    Service Unavailable on IIS6 Win2003 x64
    'style.cssText' is null or not an object
    "the current fsmo could not be contacted" when change rid role
    远程激活程序
    新浪图片病毒
  • 原文地址:https://www.cnblogs.com/gbin1/p/2506680.html
Copyright © 2011-2022 走看看