hasownproperty

面向对象-2:原型链 / hasOwnProperty自身属性 / contructor / call、apply、bind改变this指向 / 原型继承 / 传值和传址 / 深拷贝 / 组合继承

最后都变了- 提交于 2020-03-16 20:25:12
原型链 原型链是指对象在访问属性或方法时的查找方式。 1.当访问一个对象的属性或方法时,会先在对象自身上查找属性或方法是否存在,如果存在就使用对象自身的属性或方法。如果不存在就去创建对象的构造函数的原型对象中查找 ,依此类推,直到找到为止。如果到顶层对象中还找不到,则返回 undefined。 2.原型链最顶层为 Object 构造函数的 prototype 原型对象,给 Object.prototype 添加属性或方法可以被除 null 和 undefined 之外的所有数据类型对象使用。 构造函数 prototype 原型链 __proto__ hasOwnProperty():看是不是对象自身底下的属性 contructor查看对象的构造函数 可以用来做判断 instanceof:对象与构造函数是否在原型链上有关系 toString()判断类型; 转换字符串 进制转换 hasOwnProperty 判断键名是否是对象自身的属性 call、apply、bind 改变this指向 call 传参的区别,传字符串 apply 传数组 bind 后面一个括号不能省略 (bind不加括号,改变指向但是现在不执行) 继承:子类继承父类所有属性和行为,父类不受影响。 目的:找到类之间的共性精简代码 继承 原型继承 简单原型继承,出现影响父类的情况 传值和传址 传址: 复杂数据类型;

原型和原型链

↘锁芯ラ 提交于 2020-03-11 16:31:05
1:参照此文理解js的静态方法与实例方法 https://www.cnblogs.com/faithZZZ/p/7045323.html 以下是我结合jquery设计的原理的一些理解 var Fn=function(){        //【注意】用this定义出来的属性和方法是在prototype里的          this.a=10;          this.add=function(){          console.log('add');          }        } //给Fn添加静态属性和方法,这些静态属性和方法只有Fn才能引用到 //jquery的$就是一个类似Fn的方法,$.trim()就是$的一个静态方法。 Fn.age=18; Fn.trim=function(){ console.log('trim'); } console.log(Fn.trim); //给Fn添加实例属性和方法,这些实例的属性和方法只有实例出来的对象(new出来的对象)才有 //jquery中的addClass也是这样添加的,$('span') 调用$方法,传参'span'会返回一个实例对象出来 Fn.prototype.name='penny'; Fn.prototype.addClass=function(){ console.log('addClass'); }

原型链

好久不见. 提交于 2020-03-11 16:27:29
function Foo() { this.value = 42;}Foo.prototype = { method: function() {}};function Bar() {}// 设置Bar的prototype属性为Foo的实例对象Bar.prototype = new Foo();Bar.prototype.foo = 'Hello World';// 修正Bar.prototype.constructor为Bar本身Bar.prototype.constructor = Bar;var test = new Bar() // 创建Bar的一个新实例// 原型链test [Bar的实例] Bar.prototype [Foo的实例] { foo: 'Hello World' } Foo.prototype {method: ...}; Object.prototype {toString: ... /* etc. */};  上面的例子中,test 对象从 Bar.prototype 和 Foo.prototype 继承下来;因此,它能访问 Foo 的原型方法 method。同时,它也能够访问那个定义在原型上的 Foo 实例属性 value。需要注意的是 new Bar() 不会创造出一个新的 Foo 实例,而是重复使用它原型上的那个实例;因此,所有的 Bar

JavaScript里的数组Array使用方法总结,超全的o

試著忘記壹切 提交于 2020-03-07 03:26:51
一直以来都想来总结一下js的数组使用方法,因为有时候时间一长有的方法就记不太清,突然要用的时候还要去查,这里做下总结,自己巩固一下同时也方便以后有缘人一起来看 😁 首先我们先来看一下谷歌浏览器里Array内置的方法有多少,如下↓ 真是不看不知道,一看吓一跳,在我印象里数组的使用方法加上ES6新语法最多也就十几个吧 这里我数了一下从concat到valueOf总共 37 个(你敢信,无知啊),下面的“__”开头的就暂时不说了 ----------------这里我们先来说一下最常用的几个,然后再一个一个解读剩下的---------------- 1.Array.push() -+-向数组的末尾添加一个或更多元素,并返回新的长度。 let arr = [1,2,3]; console.log(arr.push(6)); // 4 console.log(arr)      // [1, 2, 3, 6] 2.Array.pop() -+-删除数组的最后一个元素,并返回删除的元素。 let arr = [1,2,3]; console.log(arr.pop()); // 3 console.log(arr)    // [1, 2] 3.Array. unshift() -+-向数组的开头添加一个或更多元素,并返回新的长度。 let arr = [1,2,3]; console.log

对象④for in 循环

ε祈祈猫儿з 提交于 2020-03-06 13:46:02
和 in 操作符一样, for in 循环同样在查找对象属性时遍历原型链上的所有属性。 注意: for in 循环 不会 遍历那些 enumerable 设置为 false 的属性;比如数组的 length 属性。 // 修改 Object.prototype Object.prototype.bar = 1; var foo = {moo: 2}; for(var i in foo) { console.log(i); // 输出两个属性:bar 和 moo } 由于不可能改变 for in 自身的行为,因此有必要过滤出那些不希望出现在循环体中的属性, 这可以通过 Object.prototype 原型上的 hasOwnProperty 函数来完成。 注意: 由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能。 使用 hasOwnProperty 过滤 // foo 变量是上例中的 for(var i in foo) { if (foo.hasOwnProperty(i)) { console.log(i); } } 这个版本的代码是唯一正确的写法。由于我们使用了 hasOwnProperty ,所以这次 只 输出 moo 。 如果不使用 hasOwnProperty ,则这段代码在原生对象原型(比如 Object.prototype

instanceof 和in 和hasOwnProperty

丶灬走出姿态 提交于 2020-03-01 11:54:01
instanceof /in /hasOwnProperty instanceof:检测某一个实例是否隶属于这个类 function Fn() { var n = 10; this.m = n; var f = new Fn() // 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'));//=

【JavaScript】面向对象:hasOwnProperty()方法与in操作符

社会主义新天地 提交于 2020-02-09 18:16:15
hasOwnProperty()方法 使用 hasOwnProperty()方法(是从 Object 继承来的)可以检测一个属性是存在于实例中,还是存在于原型中。只在给定属性存在于对象 实例 中时,才会返回 true。 function Person ( ) { } Person . prototype . name = "Nicholas" ; Person . prototype . age = 29 ; Person . prototype . job = "Software Engineer" ; Person . prototype . sayName = function ( ) { alert ( this . name ) ; } ; var person1 = new Person ( ) ; var person2 = new Person ( ) ; console . log ( person1 . hasOwnProperty ( "name" ) ) ; //false person1 . name = "Greg" ; console . log ( person1 . name ) ; //"Greg"——来自实例 console . log ( person1 . hasOwnProperty ( "name" ) ) ; //true

js属性对象的hasOwnProperty方法

偶尔善良 提交于 2020-02-02 13:09:28
判断自生属性与继承性 function foo() { this.name = 'foo' this.sayHi = function () { console.log('Say Hi') } } foo.prototype.sayGoodBy = function () { console.log('Say Good By') } var myPro = new foo() console.log(myPro.name) // foo console.log(myPro.hasOwnProperty('name')) // true console.log(myPro.hasOwnProperty('toString')) // false console.log(myPro.hasOwnProperty('hasOwnProperty')) // fasle console.log(myPro.hasOwnProperty('sayHi')) // true console.log(myPro.hasOwnProperty('sayGoodBy')) // false console.log('sayGoodBy' in myPro) // true 判断自生属性是否存在 var o = new Object(); o.prop = 'exists'; function

JavaScript快速入门(7):对象

心已入冬 提交于 2020-01-23 05:37:25
本系列随笔是本人的学习笔记,初学阶段难免会有理解不当之处,错误之处恳请指正。另:转载请注明出处。 简介 JavaScript 中,对象可以看做是“属性”的集合(这里的“属性”不仅是属性名,而是一个键/值对,即属性名和属性值)。 对象的创建方式 JavaScript 中可以用以下三种方式创建对象: 直接使用字面值对象(看起来同JSON格式); 使用 new 运算符创建(new 后面跟一个构造函数调用,JavaScript 中没有“类”的概念,对象是通过构造函数创建而来的) 使用 Object.create() 方法,其第一个参数指定对象的原型对象(可以理解为parent对象),第二个参数为可选参数 示例: var a = {}; // #1,字面值创建方式,创建一个空对象 var b = { x: 1, y: 2 }; // #2,字面值创建方式,创建一个非空对象 var c = new Object(); // #3,通过 new 运算符创建,创建一个空对象,同 #1 var d = new Date(); // #4,通过 new 运算符创建,创建一个日期对象 var e = Object.create(Object.prototype); // #5,创建一个空对象,同 #1 和 #3 var f = Object.create(b); // #6,创建一个继承自 b 的对象

js 实现获取对象所有键名(key)的方法

帅比萌擦擦* 提交于 2020-01-16 02:26:54
1.for in 循环 并且使用hasOwnProperty 方法 var jsonObject1 = { "name": "xiaoming", "age": 29 }, var keys1 = []; for (var p1 in jsonObject1) { if (jsonObject1.hasOwnProperty(p1)) keys1.push(p1); } alert(keys1); 如果不使用 hasOwnProperty,给Object 添加自己的属性时,也会输出出来 Object.prototype.test = "I am test"; var jsonObject = { "name": "xiaoming", "age": 29 }, keys = []; for (var p in jsonObject) keys.push(p); alert(keys); //name,age, test 来源: CSDN 作者: qq_37390420 链接: https://blog.csdn.net/qq_37390420/article/details/103984527