use*_*721 9 javascript javascript-events
在我的一个问题中,我得到以下代码作为答案之一.我对语言的理解现在变得更好了,只有一个小问题.
var person = function() {
this.firstName = "";
this.lastName = "";
}
person.prototype.showFullName = function () {
console.log(this.firstName + " " + this.lastName);
}
var perObj = new person();
perObj.firstName = "Penelope";
perObj.lastName = "Barrymore";
perObj.showFullName();
Run Code Online (Sandbox Code Playgroud)
考虑到对象,
var person = function() {
this.firstName = "";
this.lastName = "";
}
Run Code Online (Sandbox Code Playgroud)
当我用这个对象来称呼时,
var perObj = new person();
Run Code Online (Sandbox Code Playgroud)
这类似于构造函数的东西吗?
一刻代码
var perObj = new person();
Run Code Online (Sandbox Code Playgroud)
被调用会自动执行以下两行吗?
this.firstName = "";
this.lastName = "";
Run Code Online (Sandbox Code Playgroud)
而且在我正在研究的一个博客中,如果文件名是Samplescript.js
,如果函数是使用相同的名称编写的var Samplescript=function(){}
,那么这个函数会被视为构造函数吗?请澄清一下这个.
尽管理论上事情很清楚,但实际上我并没有得到任何关于构造函数的令人满意的答案,在这个例子中,它的编写方式有很多清晰的理解.
Iva*_*hko 13
首先person
是常规的JavaScript函数.当你调用它时,当然是行:
this.firstName = "";
this.lastName = "";
Run Code Online (Sandbox Code Playgroud)
执行.构造函数是一个概念,而不是JS语言中真正存在的东西.您需要构造函数通过调用来创建新的类似对象new MyCtr()
.同时,您需要常规函数来封装逻辑片段,并使其可以在不同的地方重复使用,而无需复制/粘贴代码.
您可以将JavaScript中的所有函数用作构造函数.只需new
在函数调用表达式前添加关键字.这件事改变了函数执行的上下文.没有new
该功能是针对全局对象(window
在浏览器中)执行的.而this
在函数内部变量指上下文.
并非每个函数都可以成为构造函数.通常,构造函数正在使用this
变量执行某些操作,该变量是对在new MyCtr()
调用期间创建的对象的引用.此外,构造函数永远不会返回值.
让我们看几个例子(你可以直接在浏览器的控制台中执行它):
function foo() {
this.a = 1;
}
foo(); // using function as a regular function. Ctx is window.
console.log(window.a); // prints "1"
foo.call(window); // explicitly specify execution ctx. The same as just foo() call
var instance = new foo(); // using foo as a constructor
console.log(instance.a); // prints "1"
// actually you can do it without new keyword
var instance = {}; // manually create new object
foo.call(instance); // manually call foo against this object
console.log(instance.a); // prints "1"
// However, the code above is not strictly equivalent to the code using new.
// It omits the concept of prototype, but it's enough for our current task.
Run Code Online (Sandbox Code Playgroud)
关于功能和文件.像Java这样的语言中没有这样的东西,每个类必须放在单独的文件中.您可以将所有函数放在一个文件中,然后将其用作构造函数.但是,最佳实践是每个文件(称为模块)驻留一个构造函数(作为类读取).
当使用new运算符调用函数时,JavaScript中的任何函数都可以充当构造函数.
现在,构造函数的作用是什么? 它从构造函数创建/实例化一个对象. 如下图所示.
LINK ,它非常清楚地解释了基本原理.
是什么this
?
当使用new调用此构造函数时,this
指向在该调用时创建的新对象.在那个对象中我们设置firtName
和lastName
(它是创建的新对象的初始化).
现在,当我们向构造函数的原型添加方法时,在使用构造函数创建的所有对象之间共享(图片说明它点亮了更多)
并且关于你的上一个查询 "并且在我正在研究的一个博客中,如果文件名是Samplescript.js,并且如果函数是使用相同的名称编写的,例如var samplescript = function(){},那么这个函数是被认为是构造函数?请澄清这个"
当使用new运算符调用函数时,JavaScript中的任何函数都可以充当构造函数,而不是博客所说的那样.
所以请停止阅读该博客,我提供的链接是一个非常好的起点