有个constructor指向的问题。

            function Person(name){
                this.name=name;    
            }
            var p=new Person('x');
            console.log(p.constructor); 
            // function Person(name){this.name=name;} 
            
            function Person2(name){
                this.name=name;    
            }
            var one={
                sex:'man' 
            }
            Person2.prototype=one;
            var p2=new Person2('x');
            console.log(p2.constructor);
            //function Object() { [native code] },为什么把原型指定为one之后,构造函数的指向也发生了改变。不知道该从哪里梳理这条链。     
阅读 1.9k
2 个回答

因为你把默认生成的原型给重写了。

默认生成的 prototype 的 constructor 是指向构造函数的。
你重写后, one 这个对象本身没有 constructor 这个属性.
所以当你 p2.constructor 时,属性查找顺序如下

p2 上没有 constructor, 查找它的原型 one , one 上没有, 查找 one 的原型 Object, Object 上没有, 查找 Object 上的原型 Object.prototype 。 Object.prototype 上有 constructor , 所以就把这个 constructor 返回。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题