ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
``` /* * 构造函数执行,不写RETURN,浏览器会默认返回创建的实例,但是如果我们自己写了RETURN? * 1.return是的一个基本值,返回的结果依然是类的实例,没有受到影响 * 2.如果返回的是引用值,则会把默认返回的实例覆盖,此时接收到的结果就不在是当前类的实例了 * * =>构造函数执行的时候,尽量减少RETURN的使用,防止覆盖实例 */ function Fn() { var n = 10; this.m = n; // return;//=>这样RETURN是结束代码执行的作用,并且不会覆盖返回的实例 // console.log(1); } var f = new Fn();//=>new Fn; 和new Fn()一样的,在构造函数执行的时候,如果Fn不需要传递实参, 我们可以省略小括号,意思还是创建实例(和加小括号没有区别) console.log(f); //=>instanceof:检测某一个实例是否隶属于这个类 // console.log(f instanceof Fn);//=>TRUE // console.log(f instanceof Array);//=>FALSE // console.log(f instanceof Object);//=>TRUE (万物皆对象:所有的对象, 包含创建的实例都是Object的实例) //=>in:检测当前对象是否存在某个属性(不管当前这个属性是对象的私有属性还是公有属性, 只要有结果就是TRUE) // console.log('m' in f);//=>TRUE // console.log('n' in f);//=>FALSE // console.log('toString' in f);//=>TRUE toString是它的公有属性 //=>hasOwnProperty:检测当前属性是否为对象的私有属性(不仅要有这个属性, 而且必须还是私有的才可以) // console.log(f.hasOwnProperty('m'));//=>TRUE // console.log(f.hasOwnProperty('n'));//=>FALSE 连这个属性都没有 // console.log(f.hasOwnProperty('toString'));//=>FALSE 虽然有这个属性但是不是私有的属性 //=>思考题:编写一个方法hasPubProperty,检测当前属性是否为对象的公有属性,和hasOwnProperty对应 function hasPubProperty(obj, attr) { //=>OBJ:要检测的对象 //=>ATTR:要检测的属性 //... } hasPubProperty(f, 'm');//=>FALSE hasPubProperty(f, 'n');//=>FALSE hasPubProperty(f, 'toString');//=>TRUE ```