构造函数中的方法和创建构造函数后函数上的方法有什么区别
What is difference between method in constructor and method on function after constructor created
第一代码和第二代码有什么区别?有什么逻辑上的区别吗?
第一:
function test(val) {
this.val = val;
this.get = function () {
return "Hello world";
};
}
第二:
function test(val) {
this.val = val;
}
test.get = function () {
return "Hello world";
};
何时将方法添加到构造函数,何时设置方法,以及为什么?
第二个向函数本身添加一个方法。 这与第一个实例方法不同。
这两者在功能上相似:
function test(val) {
this.get = function () {};
}
和
function test(val) {
}
test.prototype.get = function() {};
两者都创建如下所示的实例方法:
var x = new test("hello");
x.get();
但是,您的第二个选项只是在构造函数上创建一个属性,该属性不是测试创建对象的方法。 它是一种静态方法。 执行此操作时:
function test(val) {
this.val = val;
}
test.get = function () {
return "Hello world";
};
然后,执行以下命令:
var x = new test("hello");
x.get();
您会发现x
对象没有.get()
方法。 该方法仅在构造函数本身上test.get()
。 要使方法存在于对象的新实例上,必须将其分配给原型对象或在创建对象后分配给对象(例如,在构造函数或其他方法中)。 直接附加到构造函数本身的方法(如test.get = function () {}
中)只是构造函数的属性,不由构造函数创建的对象继承。 它们有点类似于其他语言中的类静态方法。 它们不是实例方法。
在第一个示例中,get
方法仅在创建新对象后可用。
test.get(); // This will throw an error
var a = new test();
a.get(); // This will work.
在第二个示例中,可以直接在测试函数上调用 get
方法
test.get(); // This will work.
如果你把代码翻译成英文,它看起来像这样
第一:
- 让我们定义一个名为 test 的函数。
- 在此函数中,让我们在返回对象上创建一个
get
函数。
第二
- 让我们定义一个名为 test 的函数。
- 让我们将一个名为
get
的函数定义为test
函数的属性。
在您的第一个示例中,后台的 JavaScript 正在为您创建一个对象,该对象将在查找失败时委托给构造函数原型,并且它还为您返回该对象。例如
function test(val) {
//var this = Object.create(test.prototype);
this.val = val;
this.get = function () {
return "Hello world";
};
//return this;
}
因此,您实际上是在每次调用测试函数时将方法添加到为您创建的每个实例对象上。
在第二个示例中,您利用了函数只是 JavaScript 中的对象这一事实,并向函数添加属性,这是相当罕见的。
相关文章:
- 使构造函数参数具有ES6类方法的特权
- 如何从构造函数中调用js原型方法
- 未能运行构造函数:TypeError:对象#<对象>没有方法'addPlugin'
- 我应该在原型上还是在新创建的实例上调用构造函数方法
- Angular promise回调不是在构造函数方法内部触发,而是在对象文本方法中触发
- 在ES2015中定义一个类,构造函数方法是什么以及为什么它是必不可少的
- Sencha ExtJs 为什么从“构造函数”方法返回“this”
- 如何在 javascript 中从子原型调用父类的构造函数方法
- 在构造函数之外更改 JavaScript 中的构造函数方法
- 这种实例化构造函数方法的风格是什么
- 如何在 JavaScript 中使用继承与构造函数方法一起使用 返回具有私有属性的对象文本
- 我的javascript构造函数方法以文本形式返回整个方法,而不是预期的返回值
- 如何在事件中将变量传递给构造函数方法
- 如何在jQuery语句中使用Javascript构造函数方法
- 作为对象属性调用函数时如何引用构造函数方法
- Reactjs,这.上下文在构造函数方法中未定义
- 为什么无法通过实例化构造函数方法将对象推入数组
- 为什么我不能在我的模块中调用构造函数方法?
- Javascript构造函数方法返回与预期不同的内容
- 构造对象,使其具有包含set属性方法的构造函数方法