在原型的构造函数中初始化属性时获取"未定义"

Mar*_*ato 1 javascript jquery prototype

我开始使用原型,如果我使用代码,我得到了预期的结果:

$(document).ready(function() {
    var MyObject = new MyClass();

    MyObject.assign();

    MyObject.console();
});

function MyClass() {
    var myProperty;
};

MyClass.prototype = {

    assign: function() {
        this.myProperty = 'Hello world!';
    },

    console: function() {
        console.log(this.myProperty); // Shows 'Hello world!'
    }
};
Run Code Online (Sandbox Code Playgroud)

但是下面的代码返回undefined.我不明白为什么,有人可以帮我吗?

$(document).ready(function() {
    var MyObject = new MyClass();

    MyObject.console();
});

function MyClass() {
    var myProperty = 'Hello world!';
};

MyClass.prototype = {

    console: function() {
        console.log(this.myProperty); // Shows 'undefined'
    }
};
Run Code Online (Sandbox Code Playgroud)

Don*_*mmy 5

在第一段代码中,您实际创建并定义了该属性:this.myProperty = 'Hello world!';在此之前,此属性不存在.

在第二段代码中,您永远不会定义属性.

将其更改为:

function MyClass() {
    //NOT "var", but "this."
    this.myProperty = 'Hello world!';
};
Run Code Online (Sandbox Code Playgroud)

另一种方法(如果值myProperty应默认为某个值,则将其放入原型中:

MyClass.prototype = {

    //Now all instantiations will have this preset    
    myProperty: "Hello World",

    console: function() {
        console.log(this.myProperty);
    }
};
Run Code Online (Sandbox Code Playgroud)