javascript 容易忽略的小知识点 new到底做了什么?
问题:平时我们经常写 var ss = new Person();ss就是一个由’Person类‘生成的对象了,可是我们的Person方法里却没有写 return;
(var ss= Person(); 返回的是undefined 因为 方法内没有写return)
先来一段普通代码
function Person( name ){
this.name = name;
//return this;
};
Person.prototype.getName = function(){
return this.name;
};
var ss= new Person(22);
console.log( ss );
地球人都知道 打印结果是 
接下来第二种情况
var obj= new Object();
function Person( name ){
this.name = name;
return this;
};
Person.prototype.getName = function(){
return this.name;
};
var ss= Person.apply(obj);
console.log( ss );
打印结果是 
你可能也觉得这很正常,接下来请看
var obj= new Object();
function Person( name ){
this.name = name;
// return this;
};
Person.prototype.getName = function(){
return this.name;
};
var ss= Person.apply(obj);
console.log( ss );
打印结果是--undefined
由此 我们可以得出结论:
1 javascript 没有类的概念, 一定要切记,不要受其他基于类的语言影响(如java),认为对象一定是由类创建来的,函数是一等对象
2 new 关键字 我们可以认为做了以下几件事情
var ss = (function(Person){
var obj = new Object();//new 一个object对象--才发现这里也用到了new……这个怎么解释……靠 我还木有研究啊
obj.__proto__ = Person.prototype;//对象的原型指向Person的原型
var ret = Constructor.apply( obj, arguments );//this--指向obj
return typeof ret === 'object' ? ret : obj;//如果Person函数有return则返回ret,否则返回obj
})(Person)
补充: 对象字面量是不能直接找自己的原型的,它必须委托给它的构造器 ,然后构造器去找它的原型
javascript 容易忽略的小知识点 new到底做了什么?的更多相关文章
- 关于angular的一些新手容易忽略的小知识点
1.解决页面刚加载时使用{{name}}这种方式绑定数据会有一瞬间的表达式显示的问题 方法一: 使用ng-bind来绑定数据, 方法二: 添加ng-cloak指令:如 <div ng-app ...
- springmvc中那些易被忽略的小知识点
1.springmvc会为没有view的modelandview指定默认view 知道这个的时候我都惊呆了. 我从来都是手动指定view名字,今天看到别人写的代码竟然直接返回了个mav,貌似是在dis ...
- React之小知识点总结
总结react中常常被忽略的小知识点 1)即使state里设置成和之前的值一样,render也会重新渲染 2)父组件传给子组件的属性(props是只读的,在子组件中已在this.state里将属性赋值 ...
- javascript中关于value的一个小知识点(value既是属性也是变量)
今天在学习input的value值时,发现这么一个小知识点,以前理解不太透彻 [1]以下这种情况是常见情况,会弹出“测试内容” <input type="button" va ...
- 前端小知识点---html换行被解析为空格的相关知识
这个系列主要记录一下常被忽略但又经常产生影响的知识点,纯做个记录,方便查询 html换行被解析为空格也是常说的3像素空隙的问题,根据测试不同浏览器产生的空隙大小会不一样,Chrome,Firefox, ...
- 【转】HTML5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于<h ...
- html5的小知识点小集合
html5的小知识点小集合 html5知识 1. Doctype作用?标准模式与兼容模式各有什么区别? (1).<!DOCTYPE>声明位于位于HTML文档中的第一行,处于< ...
- jQuery 小知识点(插件)
1.jQuery插件小知识点: 估计很多人都没弄明白下面的东西,特从网络上搜索了下面的知识,自己以后用起来也比较方便: $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例 ...
- 深入了解webpack前,可以了解的小知识点。
阅读前:文章大概是写,简单用过webpack,想继续深入了解webpack前需要了解的知识.但文章内容跟webpack使用关系并不大. 文章概要: Object.defineProperty call ...
随机推荐
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- 模块化你的JS代码
为什么要使用模块模式? 因为在全局作用域中声明的变量和函数都自动成为全局对象Window的属性,这经常会导致命名冲突,还会导致一些非常重要的可维护性难题,全局变量越多,引入错误BUG的概率就越大!所以 ...
- css小技巧(1)
1.-webkit-overflow-scrolling: touch; 解决ios滑动时无缓冲问题 2.::-webkit-scrollbar 设置ios滑动时是否显示滚动条 3.::selecti ...
- count(*) 与count (字段名)的区别
count(*) 查出来的是:结果集的总条数 count(字段名) 查出来的是: 结果集中'字段名'不为空的记录的总条数
- 启动/关闭oracle服务有三种方式
启动oracle服务有三种方式: 1 从控制面板 2 使用MS-DOS命令 3 通过Oracle Administration Assistant for WindowsNT -通过控制面板启动ora ...
- 错误 1 类型“System.Web.Mvc.ModelClientValidationRule”同时存在于“c:\Progra
问题如图: 解决办法: step1: 首先关闭你应用程序方案,在你保存项目的文件夹下找到ProjectName.csproj ProjectName是你实际的应用程序名称. step2: 用文字编辑 ...
- ubuntu kylin 14.04安装配置MongoDB v2.6.1(转)
1.获取最新版本 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.1.tgz 2.解压并进入bin目录 tar zxvf mongo ...
- shell编程:定义简单标准命令集
shell是用户操作接口的意思,操作系统运行起来后都会给用户提供一个操作界面,这个界面就叫shell,用户可以通过shell来调用操作系统内部的复杂实现,而shell编程就是在shell层次上进行编程 ...
- Web Service
Web Service全称XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP ...
- github如何删除一个(repository)仓库
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub.作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越 ...