谈谈JavaScript的New关键字

原型和闭包算是JavaScript中最常见,最难以理解,最容易被当做问题的两个部分,当然还有它们的延伸,如作用域链,继承等等吧,我最近也是各种看,各种翻,记录点自己的心得,写写总会让自己的理解更深一些。(跟标题的关系不大啦,就感慨句,每次总感觉自己懂了,再翻还是收获满满)

先谈一下JavaScript中New关键字吧,通常我们通过它来创建一个类的实例对象,在JavaScript中,实例化对象之后,也就继承了类的属性以及方法。通过代码来演示一下 

function Person(name){

this.name = name;

}

Person.age= "23";

Person.prototype.say = function(){

console.log("I'm " + this.name);

};

var person= new Person("王方");

console.log(

person.name, //王方

person.height //undefined

);

person.say(); //I'm 王方

console.log(

Person.name, //Person

Person.age//23

);

Person.say(); //Person.say is not a function

我们看下这一行 

var person= new Person("王方");

new 到底做了什么呢?恩 JS引擎做的工作就是下面这样  

var obj = {};

obj.__proto__ = Person.prototype;

var result = Person.call(obj,"王方");

return typeof result === 'obj'? result : obj;

1.首先创建一个新对象 

2.把obj的__proto__ 指向Person的原型对象prototype,此时便建立了obj对象的原型链:obj->Person.prototype->Object.prototype->null 

3.在obj对象的执行空间调用Person函数并传递参数“王方”。 相当于var result = obj.Person("王方")。当这句执行完之后,obj便产生了属性name并赋值为"王方"。 

4.判断返回值,如果无返回值或者返回一个非对象值,就将obj返回,否则讲返回值作为新对象返回(有点绕口,三元运算符,自己看下吧) 

总结:

 Javascript的new关键字主要的作用是继承,如上例子所言,但是要记住一点,Person是一个函数,而person是一个对象,至于函数与对象之间的区别,我有时间再写吧。

以上是 谈谈JavaScript的New关键字 的全部内容, 来源链接: utcz.com/z/346803.html

回到顶部