收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1957|回复: 6

[讨论] 大家一起讨论下prototype一些东西,有些绕。

[复制链接]
发表于 2012-10-11 20:18:08 | 显示全部楼层 |阅读模式
50体力
本帖最后由 kxm1984 于 2012-10-16 15:57 编辑
  1. function a(){
  2. }

  3. a.prototype = {
  4.         b : function(){
  5.                 alert("我是B")
  6.         }
  7. }

  8. a.prototype.b.prototype = {
  9.         c : function(){
  10.                 alert("我是C")
  11.         }
  12. }

  13. var d = new a();

  14. d.b();
  15. d.b.prototype.c();
复制代码
讨论讨论上面这个是怎么回事,到底该怎么用,怎么用比较优雅!!!!

__proto__不讨论了,谢谢下面告知__proto__用法的大虾。

 楼主| 发表于 2012-10-15 08:42:54 | 显示全部楼层
没有人顶,自己顶一下,版主啊,都没有人来答复我,您老出来说说看吧!!!谢谢
回复

使用道具 举报

发表于 2012-10-15 08:51:37 | 显示全部楼层
对函数进行原型扩展只能这样的法,或者直接给prototype赋值一个对象。

prototype扩展往往是给一个函数在实例化后的一个扩展成员方法或变量。

所以可以是
var d = new d.b();
d.c();

__proto__是一被实例化后的对象来获取它原先构造函数的prototype,此属性是ECNAScript3的内置属性,跟浏览器无关,但不同浏览器限制了其可访问权限,IE下为私有不可读写,webkit和gecko 是只读的
回复

使用道具 举报

发表于 2012-10-15 11:08:54 | 显示全部楼层
我看了prototype的久了也会不记得,其实只要记得是往函数扩展方法就行了,原型找不到的东西,会向上一层找,一直找....

__proto__  已经是不推荐使用的了,可以用getPrototypeOf

stackoverflow 贴来:

var f=function(){};
var instance=new f();

var prototype = f.prototype;
prototype.num=4;

//var prototype=Object.getPrototypeOf(instance);
var prototype = instance.__proto__;
alert(prototype.num);
由于IE9+才支持getPrototypeOf,可以做个兼容。


if(!Object.getPrototypeOf) {
  if(({}).__proto__===Object.prototype&&([]).__proto__===Array.prototype) {
    Object.getPrototypeOf=function getPrototypeOf(object) {
      return object.__proto__;
    };
  } else {
    Object.getPrototypeOf=function getPrototypeOf(object) {
      // May break if the constructor has been changed or removed
      return object.constructor?object.constructor.prototype:void 0;
    };
  }
}
回复

使用道具 举报

发表于 2012-10-15 14:42:42 | 显示全部楼层
提示: 作者被禁止或删除。
回复

使用道具 举报

 楼主| 发表于 2012-10-16 15:55:26 | 显示全部楼层
都没有说到点子上。版主出来吼几句,行不行啊。
回复

使用道具 举报

发表于 2012-10-17 09:54:59 | 显示全部楼层
1. 你到底要问什么, 能表达清楚点么?

2. a.prototype.b.prototype = {
        c : function(){
                alert("我是C")
        }
}

真心搞不懂这么写为了什么? 好看?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-11-28 10:26 , Processed in 0.107150 second(s), 6 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表