+ -
当前位置:首页 → 问答吧 → js访问原型的问题

js访问原型的问题

时间:2011-09-28

来源:互联网

JScript code

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

请问如何访问tfn里的a??
以下方式都不行。。。。
1、tfn.prototype.a 结果为undefined
2var c=tfn.prototype;
   c.a             结果为undefined
3var c=new tfn();  
   c.a             结果为undefined

作者: xuhaijin   发布时间: 2011-09-28

JScript code

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


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

给你个参考
JScript code

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

作者: sharp_ice   发布时间: 2011-09-28

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

作者: sharp_ice   发布时间: 2011-09-28

将prototype的赋值放在function的里面,都没执行function,赋值怎么能赋上呢?

作者: JParser   发布时间: 2011-09-28

tfn.prototype放到外面的吧

作者: BLUE_LG   发布时间: 2011-09-28

JScript code

   var tfn=new Function();
    tfn.prototype = {
            a: "aaaaaaaaa",
            b: "bbbbbbbb"
        };
var c=new tfn();
alert(c.a);

作者: BLUE_LG   发布时间: 2011-09-28

5楼正解,为啥要放到function里面。

作者: javascript_2011   发布时间: 2011-09-28

可以访问到是没有问题的 但是我不认同楼主的写法 当然我可能不了解楼主的想法是神马
1、先说基于你的代码如何实现你的要求
JScript code
var tfn = function () {
        tfn.prototype = {
            a: "aaaaaaaaa",
            b: "bbbbbbbb"
        }
    }

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

2、个人意见
  楼主的代码中 只要执行过这个函数 其原型就会发生改变 有什么特殊用法非要让楼主这样更改原型链么?

作者: fanchuanzhidu   发布时间: 2011-09-28

JScript code

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

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


那为什么这样就行呢?

作者: xuhaijin   发布时间: 2011-09-28

在此之前,从没见过这样写的!!!

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

程序逻辑最基本的3点

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

作者: hch126163   发布时间: 2011-09-28

引用 8 楼 xuhaijin 的回复:

JScript code

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

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


那为什么这样就行呢?

你这样new的时候 只是去改变了tfn的原型上的a属性 并没有对原型进行修改 所以你的原型上经过修改后是有a属性的 能访问到是必然的

作者: fanchuanzhidu   发布时间: 2011-09-28

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

而这种写法 你new的时候 把原型给改了 所以要想访问到a 要再new一次 
换句话说 也要new两次才能够访问到a属性和b属性

作者: fanchuanzhidu   发布时间: 2011-09-28

相关阅读 更多