Javascript custom object is shared

I am trying to maximize the reuse of some code. In my custom javascript object (I just use PhoneNumber for an example), I set up a prototype function like this:

var Map = {
    write: function() {
        alert('My object is ' +this);
    }
};

function PhoneNumber(number) {
    this.number = number;
}

PhoneNumber.prototype = Map;

//I can call the write function like so
var phoneObject = new PhoneNumber('1234567894');
phoneObject.write(); //ALERT My Object is Object{number:'1234567894'}

Everything works fine, except for some reason it turns my Phone Number object into a shared object instead of saving its PhoneNumber constructor. If I really place the write function inside a prototype of objects like this, it works great.

function PhoneNumber(number) {
    this.number = number;
}

PhoneNumber.prototype.write = function() {
    alert('My object is ' +this);
}

var phoneObject = new PhoneNumber('1234567894');
phoneObject.write(); //ALERT My object is PhoneNumber{number:'1234567894'}

, , . ? -, Map , , Map . ?

+5
4

PhoneNumber.prototype.constructor

PhoneNumber.prototype = Map,

PhoneNumber.prototype = Map;
PhoneNumber.prototype.constructor = PhoneNumber;

, , Map.constructor = PhoneNumber, , Map . , PhoneNumber

PhoneNumber.prototype = Object.create(Map, {
  constructor: { value: PhoneNumber }
});
+2

My object is [object Object] Firefox.

, :

JavaScript?

, instanceof. , JavaScript , , , , , , instanceof, , .

0
function PhoneNumber(number) {
    this.number = number;
}
var Map={
    write:function(){        
        console.log('My object is ' +this.number);
    }
}
PhoneNumber.prototype.write = Map.write;

var phoneObject = new PhoneNumber(1234567894);
phoneObject.write();

. , Map, .

0

, PhoneNumber toString. :

var Map = {
    write: function() {
        alert('My object is ' +this);
    }
};

function PhoneNumber(number) {
    this.number = number;
    this.toString = function(){return "PhoneNumber"}
}

PhoneNumber.prototype = Map;

//I can call the write function like so
var phoneObject = new PhoneNumber('1234567894');
phoneObject.write(); //ALERT My Object is Object{number:'1234567894'}
-1

All Articles