js访问原型的问题

xuhaijin 2011-09-28 11:48:30

var tfn = function () {
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}

请问如何访问tfn里的a??
以下方式都不行。。。。
1、tfn.prototype.a 结果为undefined
2、var c=tfn.prototype;
c.a 结果为undefined
3、var c=new tfn();
c.a 结果为undefined
...全文
142 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
豆虫 2011-09-28
  • 打赏
  • 举报
回复
var tfn = function () {
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}

而这种写法 你new的时候 把原型给改了 所以要想访问到a 要再new一次
换句话说 也要new两次才能够访问到a属性和b属性
豆虫 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xuhaijin 的回复:]

JScript code

var tfn = function () {
tfn.prototype.a = "aaaaaaaaa";
}

var newProto = new tfn();
alert(newProto.a)


那为什么这样就行呢?
[/Quote]
你这样new的时候 只是去改变了tfn的原型上的a属性 并没有对原型进行修改 所以你的原型上经过修改后是有a属性的 能访问到是必然的
hch126163 2011-09-28
  • 打赏
  • 举报
回复
在此之前,从没见过这样写的!!!

var tfn = function () {
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}
只是定义一个变量 tfn. 没有调用。当然结果是 undefined

程序逻辑最基本的3点

1、顺序
2、条件
3、循环

xuhaijin 2011-09-28
  • 打赏
  • 举报
回复

var tfn = function () {
tfn.prototype.a = "aaaaaaaaa";
}

var newProto = new tfn();
alert(newProto.a)

那为什么这样就行呢?
豆虫 2011-09-28
  • 打赏
  • 举报
回复
可以访问到是没有问题的 但是我不认同楼主的写法 当然我可能不了解楼主的想法是神马
1、先说基于你的代码如何实现你的要求
var tfn = function () {
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}

tfn();
var newProto = new tfn();
alert(newProto.a)

2、个人意见
楼主的代码中 只要执行过这个函数 其原型就会发生改变 有什么特殊用法非要让楼主这样更改原型链么?
javascript_2011 2011-09-28
  • 打赏
  • 举报
回复
5楼正解,为啥要放到function里面。
BLUE_LG 2011-09-28
  • 打赏
  • 举报
回复

var tfn=new Function();
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
};
var c=new tfn();
alert(c.a);
BLUE_LG 2011-09-28
  • 打赏
  • 举报
回复
tfn.prototype放到外面的吧
JParser 2011-09-28
  • 打赏
  • 举报
回复
将prototype的赋值放在function的里面,都没执行function,赋值怎么能赋上呢?

蓝色_冰点 2011-09-28
  • 打赏
  • 举报
回复
    function tfn() {}  //定义这个函数,最好不要用 var tfn=function (){} 这两种方式还是有区别的.
(function(){ //闭一下包,不闭也行
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
};
//} 不小心多了个括号....
})();
var c=new tfn();
alert(c.a);
蓝色_冰点 2011-09-28
  • 打赏
  • 举报
回复

var tfn = function () {
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}

如果有实例化的代码 var c=new tfn();
那么每次实例化一个对象,都会去改变tfn的prototype,你想干嘛?

给你个参考

function tfn() {} //定义这个函数,最好不要用 var tfn=function (){} 这两种方式还是有区别的.
(function(){ //闭一下包,不闭也行
tfn.prototype = {
a: "aaaaaaaaa",
b: "bbbbbbbb"
}
}
})();

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧