比如var g1=new func();
var g2=new func();
我需要当g1/g2里的某个方法调用时,同时改变g1 g2里的某个成员
1
liangdi 2015-04-25 07:43:45 +08:00 via iPhone
类似其他面向对象语言的静态变量?
function func(){ this.member=123; } func.static_member=456 ... 如果不是上面的需求那就直接把对象作为参数传递进去改变值了 |
2
oott123 2015-04-25 08:39:14 +08:00 via Android
我想可能需要用 g1.prototype.foobar
|
3
lxrmido 2015-04-25 09:13:46 +08:00
func.prototype.foobar
|
4
babyname 2015-04-25 09:29:16 +08:00
只要出现奇葩的需求,就是代码逻辑有问题。
|
5
Dn9x 2015-04-25 09:38:56 +08:00
g1提供set某个成员的方法,g2也提供,再调用你说的那个方法的时候同时调用g1和g2的set方法,
|
6
arron 2015-04-25 09:55:03 +08:00
function g(){
} function g1(){ } function g2(){ } g1.prototype = g.prototype; g2.prototype = g.prototype; g.prototype.number = 1; var n1 = new g1(), n2 = new g2(); console.log(n1.number, n2.number); //=> 1 g.prototype.number = 2; //注意不能用 n1.number = 2 或者 n2.number = 2 console.log(n1.number, n2.number); //=> 2 |
7
coolzjy 2015-04-25 10:03:00 +08:00
func.prototype.foobar +1
|
9
iyangyuan 2015-04-25 10:53:26 +08:00 via iPhone
闭包
|
10
Dn9x 2015-04-25 11:02:35 +08:00
prototype的方式这个变量就变成公用的对g1和g2而言,
|
11
hanan321 2015-04-25 22:37:37 +08:00
var Class = function () {
var instances = []; function Class (name) { this.name = name; instances.push(this); } Class.prototype.setName = function (name) { instances.forEach(function (instance) { instance.name = name; }) } return Class; }(); var instance1 = new Class('xx'); var instance2 = new Class('oo'); console.log(instance1.name); // xx console.log(instance2.name); // oo instance1.setName('xxoo'); console.log(instance1.name); // xxoo console.log(instance2.name); // xoo |