javascript - 关于prototype的疑惑
PHP中文网
PHP中文网 2017-04-10 16:45:06
[JavaScript讨论组]

先看看代码

function dd() {
    this.init();
}
dd.prototype = {
    init: function () {
        alert(1);
    }
}
new dd();

求大神分析一下这段代码。

PHP中文网
PHP中文网

认证0级讲师

全部回复(4)
高洛峰
function dd() {
    this.init();
}
dd.prototype = {
    init: function () {
        alert(1);
    }
}
var ddObject=new dd();

当使用new操作符 调用一个函数时,dd函数就是个构造函数;new操作符调用dd构造函数后,首先会创建一个对象,这个对象以dd.prototype为原型,同时赋值个this;在dd函数没有return语句或return语句返回的值为基本类型非对象的情况下,返回给ddObject,如果没有ddObject,那就会被丢弃~~
在dd构造函数的调用过程中,执行了this.init();这个this就是新创建的对象,这个init方法就是dd.prototype中定义的init函数对象-对象在调用属性或方法时会沿着原型链查找,那么执行这个方法就会alert(1)

PHP中文网

new关键字使得dd成为构造函数。没有new就是普通函数。构造函数会创造一个空对象,对象的属性由构造函数生成,并且构造出来的对象的原型指向为dd的prototype使得对象可以访问里面的方法,对象的原型可以指向别的地方,随便指。只是构造函数自动让它指向自己的prototype。记住,只有函数有prototype,只有函数是构造函数时才有实际价值。否则它只是一个函数的一般属性而已。

ringa_lee
  • 每个函数都可以是一个对象,每个函数都可以是一个构造函数,每个函数都有原型。这是javascript的特性。

  • this的指向都是通过执行上下文来决定的。
    一般情况下,这里的this会指向window,而new的存在,让this指向了原型

这里的this并不是单纯的指向原型,他会在构造函数到原型之间有一个查找过程,比如this.name,如果在构造函数能够找到,this就指向构造函数,如果构造函数中找不到,才会指向原型。 - -,总的来说就是比较复杂,我也不知道应该如何准确表述这里面的关系,就暂且这样吧,不会偏差太多。

大概就是这2个点吧,应该没有别的难以理解的地方了。

巴扎黑
   摘抄《JavaScript Ninja》
  • 所有的函数在初始化的时候都有一个 prototype 属性,该属性的初始值是一个空的对象。

  • 只有函数在作为构造器的时候,prototype 属性才会发挥更大的作用。

  • JavaScript 原型的主要用途就是使用一种类风格的面向对象和继承技术进行编码。

  • 使用 new 关键字调用一个函数,使得该函数可以作为构造器进行实例化,并产生一个新的空对象实例作为其上下文(在没有显示 return 的情况下)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号