JavaScript New关键字_浅谈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是一个对象,至于函数与对象之间的区别,我有时间再写吧。
若资源对你有帮助,浏览后有很大收获,不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力。
想获取DD博客最新代码,你可以扫描下方的二维码,关注DD博客微信公众号(ddblogs)。
或者你也可以关注我的新浪微博,了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)
如对资源有任何疑问或觉得仍然有很大的改善空间,可以对该博文进行评论,希望不吝赐教。
为保证及时回复,可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)
感谢你的访问,祝你生活愉快、工作顺心、欢迎常来逛逛。