V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
xxxpara
V2EX  ›  JavaScript

在 js 里有办法让对象新建的两个不同实例互相访问吗

  •  
  •   xxxpara · 2015-04-25 06:43:01 +08:00 · 3013 次点击
    这是一个创建于 3261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如var g1=new func();
    var g2=new func();
    我需要当g1/g2里的某个方法调用时,同时改变g1 g2里的某个成员

    11 条回复    2015-04-25 22:37:37 +08:00
    liangdi
        1
    liangdi  
       2015-04-25 07:43:45 +08:00 via iPhone
    类似其他面向对象语言的静态变量?
    function func(){
    this.member=123;
    }
    func.static_member=456

    ...

    如果不是上面的需求那就直接把对象作为参数传递进去改变值了
    oott123
        2
    oott123  
       2015-04-25 08:39:14 +08:00 via Android
    我想可能需要用 g1.prototype.foobar
    lxrmido
        3
    lxrmido  
       2015-04-25 09:13:46 +08:00
    func.prototype.foobar
    babyname
        4
    babyname  
       2015-04-25 09:29:16 +08:00
    只要出现奇葩的需求,就是代码逻辑有问题。
    Dn9x
        5
    Dn9x  
       2015-04-25 09:38:56 +08:00
    g1提供set某个成员的方法,g2也提供,再调用你说的那个方法的时候同时调用g1和g2的set方法,
    arron
        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
    coolzjy
        7
    coolzjy  
       2015-04-25 10:03:00 +08:00
    func.prototype.foobar +1
    funnyecho
        8
    funnyecho  
       2015-04-25 10:09:37 +08:00
    @babyname +1 ~~~
    iyangyuan
        9
    iyangyuan  
       2015-04-25 10:53:26 +08:00 via iPhone
    闭包
    Dn9x
        10
    Dn9x  
       2015-04-25 11:02:35 +08:00
    prototype的方式这个变量就变成公用的对g1和g2而言,
    hanan321
        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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5784 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 06:23 · PVG 14:23 · LAX 23:23 · JFK 02:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.