javascript - 为什么这种行为?__proto__ vs 原型(prototype)?

标签 javascript prototype

    function Obj1(name){
        this.__proto__={
            Name:name,
            getName:function(){
                alert(this.Name); 
            }


        };

    }

    function Obj2(name){
       this.prototype={
           Name:name,
           getName:function(){
           alert(this.Name); 
           };


       };

    }
    x=new Obj1("blue shark");
    z=new Obj2("red shark");
    x.getName();
    z.getName();// error:z.getName() is not a function

两者有什么区别?有人说 prototype 仅用于构造函数,但在这种情况下它不起作用....取而代之的是 __proto__为什么工作?

最佳答案

__proto__ (这不是标准的(但可能很快)))设置一个对象的原型(prototype)。

.prototype使用 new

设置通过调用作为构造函数设置的函数创建的对象的原型(prototype)

另外值得一提的是Object.create

例子如下:

使用.prototype伪经典:

function Car(){
   this.x = 15;
}
Car.prototype.y = 10;

var g = new Car();
g.y; // this is 10;

使用 __proto__(不要使用这个!):

var g = {x:15};
g.__proto__ = {y:10};
g.y; // this is 10;

这种方式是正确的,并且不使用new的构造函数:

var g = Object.create({y:10}); //creates x with prototype {y:10}
g.x = 15;
g.y; // this is 10

这里是 an interesting tutorial on MDN covering these .

关于javascript - 为什么这种行为?__proto__ vs 原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16394709/

相关文章:

javascript - 由于多部分 : Boundary not found 无法加载文件

javascript - 如何判断一个对象是否具有给定的原型(prototype)?

原型(prototype)函数中的 Javascript 子函数

javascript - Twitter 个人资料小部件有时无法呈现

javascript - 调用方法时的jquery语法

javascript - Chrome 新版本 37 中的弹出问题

javascript - Angularjs 模态在结果发回之前更新我的父范围

javascript - angularjs $watch 无法检测对象中属性的更改

javascript - 自定义错误和 bluebird 的 catch with ErrorClass 导致无意行为

javascript - 什么时候应该使用 util.inherits() 而不是 Node.js 中的原型(prototype)来进行继承?