Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么原型中的属性值不一致?_Javascript_Prototype - Fatal编程技术网

Javascript 为什么原型中的属性值不一致?

Javascript 为什么原型中的属性值不一致?,javascript,prototype,Javascript,Prototype,我调用了console.log(Family.prototype.money),值为200,这确认asset是函数Family的原型。但是,当我调用console.log(other.money)时,值是1000,我之前分配给原型的值。这里怎么了?看起来另一个对象的原型与函数族的原型不同,这与我在《面向对象的Javascript》一书中读到的完全矛盾 function Family(father, mother, children){ this.fathe

我调用了
console.log(Family.prototype.money)
,值为200,这确认
asset
是函数
Family
的原型。但是,当我调用
console.log(other.money)
时,值是1000,我之前分配给原型的值。这里怎么了?看起来另一个对象的原型与函数族的原型不同,这与我在《面向对象的Javascript》一书中读到的完全矛盾

        function Family(father, mother, children){
            this.father = father,
            this.mother = mother,
            this.children = children,
            this.num = function(){
                return (this.children.length+2);
            }

        }       


        Family.prototype.money = 1000; // notice!!!!

        var myFamily = new Family('Hung', 'Hong', ['Phuong', 'Lien', 'Hiep']);
        var other = new myFamily.constructor('Lan', 'Linh', ['Tung']);

        var money = other.money;

        var asset = {
            money: 200,
            car: 2,
            house: 10
        }
        Family.prototype = asset;

函数的
原型
不是实例对象的实际原型。当您使用
new
时,
prototype
对象用作内部
[[prototype]]]
属性的模板,在某些浏览器中作为
\uuuuuu proto\uuuu
公开。因此,在更改
原型之前,此表达式为
true

Family.prototype === other.__proto__ // true
Family.prototype = asset;
在您更改它之后,它是
false

Family.prototype = asset;
Family.prototype === other.__proto__ // false

这并不矛盾-您正在替换对象的原型,但其他对象仍然引用原始原型。不确定您认为此操作必须传播的原因。
var a=1,b=a;a=2
你希望现在的
b
1
还是
2
?我听不懂你的问题。别费心了。我这样问是因为我认为函数的原型与实例对象的原型相同。谢谢你,伙计!你能告诉我如何返回实例对象的原型吗?它不工作。当我调用d console.log(other.prototype)时,控制台日志返回undefined@PMH实例有一个内部的
[[Prototype]]
属性,该属性引用了在构造它们时作为其构造函数的公共原型的对象。如果以后将构造函数的原型更改为新对象,则现有实例仍然引用旧对象。新实例将引用新对象。要获取实例
[[Prototype]]
,请使用ES5。虽然instance.constructor.prototype可以工作(但不可靠),但在该语言的早期版本中并没有等效项。